怎样获取某个类的所有子类?

dengyulong 2010-05-04 04:32:16
怎样通过程序获取某个类的所有子类?
...全文
3737 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshilitao5 2011-05-31
  • 打赏
  • 举报
回复
如果是当前目录下的类怎么获取?
南南北北 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 dengyulong 的回复:]
怎样通过程序获取某个类的所有子类?
[/Quote]

至少要划定各范围吧!当前包?当前工程?其他包,还是什么。。。
郎岳樟 2010-05-05
  • 打赏
  • 举报
回复
学习下
BearKin 2010-05-05
  • 打赏
  • 举报
回复

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 {

}


应该有获得已加载类的方式的。。 挺多知识都不知道 我惭愧啊。。
cx1014 2010-05-05
  • 打赏
  • 举报
回复
貌似是要用反射做这个事
raytiger 2010-05-05
  • 打赏
  • 举报
回复
eclipes的快捷键是F4。
如用程序的话,好像spring提供了方法,具体的忘记了
yangzi315 2010-05-04
  • 打赏
  • 举报
回复
这个很难实现。面向对象中的继承,强调的是子类继承父类,而父类被哪些子类调用,在JAVA虚拟机的容器中并没有直接接口获取。
咱们试想想,如果在JAVA机制中,记录了每个类的父类,而且还记录每个父类的子类,是不是在存储上来讲就多此一举呢?
如果一定要实现,觉得可以反向,即:遍历指定的包内所有的类,看其父类是否就是预先想要的。
shine333 2010-05-04
  • 打赏
  • 举报
回复
找某个类的子类,就如同问LZ,你所有的子孙是哪些一样Mission Impossible

找某个包的子类,JDK中没有直接提供相应的接口,应该是加载classpath下的所有类,放到类似Map<Package, Collection<Class>>容器中
curacfyh 2010-05-04
  • 打赏
  • 举报
回复
不知道,好像不可能吧
whut_lcy 2010-05-04
  • 打赏
  • 举报
回复
Class1---------当前类
ClassSet-------要查找的类集合,
目标:从ClassSet中查找所有属于Class1的子类

Class1 obj = Class1.getClass().newInstance(); //创建Class1的实例

// 遍历ClassSet
if(C1.isInstance(Object obj)){
//是ClassSet的子类
}

试下吧。没验证
keeya0416 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lunbing 的回复:]
很简单,遍历源代码目录下的所有类文件,根据类定义行通过字符串匹配找出继承该类的所有子类。
[/Quote]
暴力搜索不妨一试
lunbing 2010-05-04
  • 打赏
  • 举报
回复
很简单,遍历源代码目录下的所有类文件,根据类定义行通过字符串匹配找出继承该类的所有子类。
zhanjun_chen 2010-05-04
  • 打赏
  • 举报
回复
记得我以前用java的反射机制搞过这个,呵呵
zhanjun_chen 2010-05-04
  • 打赏
  • 举报
回复
用java的反射机制试试!
Z_FEI 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 starstroll 的回复:]
想从父类往下找子类的确是不可能的,要知道只要类不是final的话谁都有继承它的自由不需要事前通知父类。

Eclipse实现不是重父类开始找而是重子类往回找,然后在逐个匹配。
[/Quote]

支持
Mars_Ma_OK 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 starstroll 的回复:]
想从父类往下找子类的确是不可能的,要知道只要类不是final的话谁都有继承它的自由不需要事前通知父类。

Eclipse实现不是从父类开始找而是从子类往回找,然后在逐个匹配。
[/Quote]

支持!
starstroll 2010-05-04
  • 打赏
  • 举报
回复
想从父类往下找子类的确是不可能的,要知道只要类不是final的话谁都有继承它的自由不需要事前通知父类。

Eclipse实现不是重父类开始找而是重子类往回找,然后在逐个匹配。
dengyulong 2010-05-04
  • 打赏
  • 举报
回复
怎么获取某个包下面的所有类呢?
dengyulong 2010-05-04
  • 打赏
  • 举报
回复
那在Eclipse中按下的Ctrl+T 之后,就能看到类的层次结构,这个又是怎么实现的呢?
keeya0416 2010-05-04
  • 打赏
  • 举报
回复
没听说过可以
加载更多回复(1)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧