如何查找一个抽象类的所有子类?

Andy84920 2011-08-05 10:52:47
有没有好用的库?像apache commons里的。。。有没有专们处理这些方面的,像接口的所有实现类等。现成的库有吗?
...全文
1844 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsdhla 2013-10-30
  • 打赏
  • 举报
回复
同求
另外12楼和13楼的你看清题目了吗?
-迷糊- 2011-09-21
  • 打赏
  • 举报
回复
5楼头像内涵了。。。
huntor 2011-09-21
  • 打赏
  • 举报
回复
这个必须限定范围,在项目的classpath里,某个jar包,或其他。

否则,你说说人文始祖黄帝的子孙有多少?
小绵羊 2011-09-21
  • 打赏
  • 举报
回复

public static void main(String[] args) throws Exception {
Class a = Class.forName("java.util.ArrayList");

Class b = null;
while ((b = a.getSuperclass()) != null) {
a = b;
System.out.println(b);
}
}

當俺樓上的是放屁
小绵羊 2011-09-21
  • 打赏
  • 举报
回复
說反射的倒是反射一個看看?
小绵羊 2011-09-21
  • 打赏
  • 举报
回复
反射個毛啊,把類加載到內存,用instanceof比較一下不就知道了
ws79965932 2011-09-21
  • 打赏
  • 举报
回复
用反射是怎么用的,能不能举个例子?
Andy84920 2011-08-05
  • 打赏
  • 举报
回复
用反射的没明白我的意思?是找基类的继承类,不是找子类的父类。如:

abstract class AbstractClass;

class MyClass extends AbstractClass;

即我现在只有AbstractClass定义,哪些扩展是留给开发人员的。所以有没有扩展我是不知道的。所以我想把我定义好的接口(抽象类)的所有实现(子类)找出来。这样我才能判断有哪些扩展,该怎么处理。

只有自己写类遍历吗?我知道是要遍历,但有没有现成的库呢?
shine333 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chdw 的回复:]

一般比较少用的,因为这样的话你必须扫描所有的jar并加载所有的class到内存中才可以知道到底是否为子类。效率低并且占用大量内存(因为可能这些类本来不需要使用的)


建议不要使用,若一定需要你可以自己加载所有的类然后再判断
[/Quote]

如果你使用自己的classloader的话,即读即扔,内存消耗还好。
ChDw 2011-08-05
  • 打赏
  • 举报
回复
一般比较少用的,因为这样的话你必须扫描所有的jar并加载所有的class到内存中才可以知道到底是否为子类。效率低并且占用大量内存(因为可能这些类本来不需要使用的)


建议不要使用,若一定需要你可以自己加载所有的类然后再判断
haofly1987 2011-08-05
  • 打赏
  • 举报
回复
对如果是已编译的class文件,,可以使用JAVA反射机制。。。。如果是源码。。。可以通过eclipse的CTRL+T查看。。。
grubby4k 2011-08-05
  • 打赏
  • 举报
回复
没看懂啥意思,标题的意思有点奇怪

接口不应该知道它的具体实现是什么,这违背设计的初衷

只有具体业务具体实现某个接口

如果你说你coding的时候想要知道的话,Eclipse里用Ctrl+T即可
BadPattern 2011-08-05
  • 打赏
  • 举报
回复
用java的反射机制,不就搞定了
meran 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 softroad 的回复:]

Java code

Class.getGenericSuperclass()
[/Quote]
头像真不错
luohuijun619 2011-08-05
  • 打赏
  • 举报
回复
用java的反谢,功能很强大
softroad 2011-08-05
  • 打赏
  • 举报
回复

Class.getGenericSuperclass()
ChDw 2011-08-05
  • 打赏
  • 举报
回复
自己遍历开发人员扩展不是一个好的方法,通常都是要求写扩展的人在某个地方写配置文件的。

其实我觉得要不你就固定一个包名,要求开发人员固定用这个包名,这样可以用Spring中的类完成


ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resourcePatternResolver.getResources("chdw.test");
System.out.println(resources[0]);

62,614

社区成员

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

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