如这个类:
import java.util.*;
import java.lang.String;
public class Info {
Date date = null;
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
public List<String> getTimes(Integer in,String s){
date = new Date();
List<String> as = new ArrayList<String>();
as.add("s");
as.add("1");
return as;
}
}
我怎么得到所引用的类是:
java.util.Date,
java.util.List,
java,util.ArrayList,
java.lang.String,
java.lang.Integer;
我使用的是eclipse ast, 可以得到但是不对,比如:
得到字段申明:
1,Date date = null; //这个我只能得到类型为Date,而且不是java.util.Date,因此我无法知道,这 个Date是java.util.Date,还是java.sql.Date;
java.sql.Date sqlDate = new java.sql.Date(date.getTime()); //这个得到的类型就是直接是:java.sql.Date;
问题:请问这个应该怎么确定?
2,还有返回类型:public List<String> getTimes(Integer in,String s)。这个返回是List<String>,我这怎么确实这个带有泛型的类型?
3,还有关于注解的类型,不过注解我想一定要先引入包吧。
4,如果我在代中用到没有申明的类,应该怎么得到呢?如:
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
或者:
cal.setTimeInMillis(new Long(2134531215L));
这两种直接使用的应该怎么来得到?
用对象名.getClass(),如 date.getClass()
我解析一个java文件,需要得到里面所有的引用的类,
给你断代码:
Class<?> info = Class.forName("Info");
//get fields
Field[] fields = info.getDeclaredFields();
for(Field f: fields){
System.out.println(f.getType());//get type
System.out.println(f.getName());//get name
}
//get method
Method[] methods = info.getDeclaredMethods();
for(Method method:methods){
System.out.println(method.getReturnType());//get type
System.out.println(method.getName());//get name
}
这个只得到:field 和 method 的所引用的类。
类上面,方法体上面的注解 所引用的类呢?
方法体里面的局部变量用引用到的类呢?
try catch所引用到的呢?反射好像都得不到。
@.Xm:
你具体是要做什么呢?是要反编译代码还是什么?
我知道的就是可以通过反射得到对象中的属性和方法,方法内部定义的局部变量我也从没取过,不知道有办法能取不,不知道你的需求是什么,也许可以通过其他方式实现,而不取局部变量呢?
@IT随笔: 只是要得到一个java类所引用的所有的类。
已经做的差不多了。用asm实现的