我有一个java对象,类Object
的一个实例 - 这就是我所知道的。现在我需要创建一个参与其创建的Class
- es列表,包括它自己的类,所有父类,所有类的属性和方法。例如:
List obj = new ArrayList();
obj.add(new Integer(4));
obj.add(new Foo());
System.out.println(allRelatedClasses(obj));
应输出如下内容:
Object, List, Collection, Iterable, Serializable, Cloneable, RandomAccess,
ArrayList, Integer, Foo
有可能吗?
答案 0 :(得分:2)
Reflections库可以处理相当多的内容。
就“参与其创作的内容”而言,您需要将其从字节码中拉出来。有几个库可以帮助解决这个问题,比如ASM和BCEL。如果您只需要所有依赖项,DepFind可能就足够了。
如果你需要限制自己所说的“创作所涉及的内容”,那么你只需要ctor所调用的类和方法所涉及的类。
如果一个类使用任何反射,但是所有的注意都被关闭 - 这些类型的依赖关系难以追踪,并且很难/不可能确定实际使用的内容。
答案 1 :(得分:1)
当然,你可以用反射来做。 obj.getClass()
返回您自己的类,obj.getClass().getParent()
返回其父级。然后,您可以循环拨打getParent()
,直到您到达Object
。
接口,字段,方法,注释也是如此。不要忘记,您应该致电getDeclaredMethods()
和getDeclaredFields()
以获取所有方法和字段,包括私有。你必须致电setAccessible(true)
来处理私人会员。
1小时的工作,你就完成了。走!祝你好运。