反射api - 查找子类型

时间:2011-06-02 06:57:17

标签: java inheritance reflection hierarchy

您好我正在尝试找出子类,形成一个超类对象。

if Class Super is the super class.
and Class Sub1 and Class Sub2 extends Class Super.(all classes are public)

Lets say I have a object of Super type as
Super superObject = new Sub1();

现在对于superObject,是否可能找到superObject在Java中扩展的子类?

由于“SuperClass不会知道它有任何SubClasses”,你能不能首先告诉我上面的问题是有效,还是我错过了任何基本概念?

提前致谢。

3 个答案:

答案 0 :(得分:2)

getClass()方法将在运行时返回对象的具体类型,而不是引用类型。所以简单地做:

Super superObject = new Sub1();
Class<? extends Super> klass = superObject.getClass();

会给你Sub1.class从你的问题中你不清楚你想用它做什么。你可以简单地调用它上面的getName(),检查你的其他引用是否属于同一类型等等。

答案 1 :(得分:2)

您的问题,“是否有可能找到superObject在Java中扩展哪个子类?”,没有任何意义。

无论如何,我认为你在寻找Class.isAssignableFrom()可能会有所帮助。

<强>用法:

superClass.isAssignableFrom(subClass);

<强>文档:

  

确定类或接口   由这个Class对象表示的是   要么是相同的,要么是超类   或者是类或者的超级接口   由指定的接口表示   类参数。

Reference

答案 2 :(得分:0)

你想要这个方法:

boolean isList = Subclass.isAssignableFrom(Superclass);

来自JavaDoc:

确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。如果是这样,它返回true;否则返回false。如果此Class对象表示基本类型,则如果指定的Class参数恰好是此Class对象,则此方法返回true;否则返回true。否则返回false。

参考:

 Class.isAssignableFrom(Class)