怎样通过程序获取某个类的所有子类?

解决方案 »

  1.   

    那在Eclipse中按下的Ctrl+T 之后,就能看到类的层次结构,这个又是怎么实现的呢?
      

  2.   

    想从父类往下找子类的确是不可能的,要知道只要类不是final的话谁都有继承它的自由不需要事前通知父类。Eclipse实现不是重父类开始找而是重子类往回找,然后在逐个匹配。
      

  3.   

    记得我以前用java的反射机制搞过这个,呵呵
      

  4.   

    Class1---------当前类
    ClassSet-------要查找的类集合,
    目标:从ClassSet中查找所有属于Class1的子类Class1 obj = Class1.getClass().newInstance(); //创建Class1的实例// 遍历ClassSet
    if(C1.isInstance(Object obj)){
        //是ClassSet的子类
    } 试下吧。没验证
      

  5.   

    找某个类的子类,就如同问LZ,你所有的子孙是哪些一样Mission Impossible找某个包的子类,JDK中没有直接提供相应的接口,应该是加载classpath下的所有类,放到类似Map<Package, Collection<Class>>容器中
      

  6.   

    这个很难实现。面向对象中的继承,强调的是子类继承父类,而父类被哪些子类调用,在JAVA虚拟机的容器中并没有直接接口获取。
    咱们试想想,如果在JAVA机制中,记录了每个类的父类,而且还记录每个父类的子类,是不是在存储上来讲就多此一举呢?
    如果一定要实现,觉得可以反向,即:遍历指定的包内所有的类,看其父类是否就是预先想要的。
      

  7.   

    eclipes的快捷键是F4。
    如用程序的话,好像spring提供了方法,具体的忘记了
      

  8.   


    package io;import java.io.File;public class GetAllSubclass {
    public static void main(String[] args) {
    File rootFile = new File(GetAllSubclass.class.getResource("/").getFile().replaceFirst("/", "")); setSonList(rootFile, rootFile.getPath() + "\\", GetAllSubclass.class);
    } public static <T> void setSonList(File rootFile, String parentDirectory, Class<T> parentClass) {
    if (rootFile.isDirectory()) {
    File[] files = rootFile.listFiles();
    for (File file : files) {
    setSonList(file, parentDirectory, parentClass);
    }
    } else {
    String className = null;
    try {
    if (rootFile.getPath().indexOf(".class") != -1) {
    className = rootFile.getPath().replace(parentDirectory, "").replace(".class", "").replace("\\", ".");
    Class<?> classObject = Class.forName(className);
    classObject.asSubclass(parentClass); System.out.println(className + " 是 " + parentClass + " 的子类");
    }
    } catch (ClassNotFoundException e) {
    System.err.println("找不到类 " + className);
    } catch (ClassCastException e) {
    System.err.println(className + " 不是 " + parentClass + " 的子类");
    }
    }
    }
    }class Sub1 extends GetAllSubclass {}class Sub2 extends GetAllSubclass {}
    应该有获得已加载类的方式的。。 挺多知识都不知道 我惭愧啊。。