列表从其他类继承的类的类型

时间:2014-03-31 17:27:05

标签: java

所以,这可能是一个简单的问题,因为我在这里只缺少一个命令。 如何列出从特定类继承的那些类的所有类型。或者采用另一种方式:如何列出类中所有子类的类型?

public class person {

    person()   
    {     
        listChilds(this);   
    } 
}
在这种情况下,

listChilds会产生一个列表,该列表可能包含teacherfootballPlayerstudentplumber等类。{{ 1}}基本上所有子类的命令。

有没有办法做到这一点?

3 个答案:

答案 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();
    }

}

打印&#34;测试&#34;,使用超级构造函数中的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);
        }
    }
}

但我同意这些评论:你应该真的考虑你在那里做了什么,以及是否有更合适的方法来实现你的目标。