所以,这可能是一个简单的问题,因为我在这里只缺少一个命令。 如何列出从特定类继承的那些类的所有类型。或者采用另一种方式:如何列出类中所有子类的类型?
public class person {
person()
{
listChilds(this);
}
}
在这种情况下, listChilds
会产生一个列表,该列表可能包含teacher
,footballPlayer
,student
,plumber
等类。{{ 1}}基本上所有子类的命令。
有没有办法做到这一点?
答案 0 :(得分:0)
这是不可能的,因为一个班级不知道是谁继承了它。请参阅oracle docs,在这里您可以看到您尝试做的背后的基本概念。
答案 1 :(得分:0)
虽然你不能按需知道扩展它的类,但你可以稍微偷偷摸摸地缓存利用其构造函数的任何东西:
public class Inheritance {
public Inheritance() {
System.out.println(this.getClass().getName());
}
public static void main(String[] args) {
Testing test = new Testing();
}
}
class Testing extends Inheritance {
public Testing() {
super();
}
}
打印"测试",使用超级构造函数中的this.getClass()
将返回正在扩展它的类的Class<?>
实例。
答案 2 :(得分:0)
http://code.google.com/p/reflections/相当容易。此代码段列出了JPanel
的所有子类,例如:
import java.util.Set;
import javax.swing.JPanel;
import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner;
import org.reflections.util.ClasspathHelper;
public class SubtypesReflectionsTest
{
public static void main(String[] args)
{
Class<?> c = JPanel.class;
Reflections reflections = new Reflections(
"", ClasspathHelper.forClass(c),
new SubTypesScanner(false));
Set<?> subTypes = reflections.getSubTypesOf(c);
for (Object element : subTypes)
{
System.out.println("Class "+element);
}
}
}
但我同意这些评论:你应该真的考虑你在那里做了什么,以及是否有更合适的方法来实现你的目标。