当前位置:编程学习 > JAVA >>

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

有没有好用的库?像apache commons里的。。。有没有专们处理这些方面的,像接口的所有实现类等。现成的库有吗? --------------------编程问答-------------------- 用java的反射机制,不就搞定了 --------------------编程问答-------------------- 没看懂啥意思,标题的意思有点奇怪

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

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

如果你说你coding的时候想要知道的话,Eclipse里用Ctrl+T即可 --------------------编程问答-------------------- 对如果是已编译的class文件,,可以使用JAVA反射机制。。。。如果是源码。。。可以通过eclipse的CTRL+T查看。。。 --------------------编程问答-------------------- 一般比较少用的,因为这样的话你必须扫描所有的jar并加载所有的class到内存中才可以知道到底是否为子类。效率低并且占用大量内存(因为可能这些类本来不需要使用的)


建议不要使用,若一定需要你可以自己加载所有的类然后再判断 --------------------编程问答--------------------
引用 4 楼 chdw 的回复:
一般比较少用的,因为这样的话你必须扫描所有的jar并加载所有的class到内存中才可以知道到底是否为子类。效率低并且占用大量内存(因为可能这些类本来不需要使用的)


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


如果你使用自己的classloader的话,即读即扔,内存消耗还好。 --------------------编程问答-------------------- 用反射的没明白我的意思?是找基类的继承类,不是找子类的父类。如:

abstract class AbstractClass;

class MyClass extends AbstractClass;

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

只有自己写类遍历吗?我知道是要遍历,但有没有现成的库呢? --------------------编程问答-------------------- 自己遍历开发人员扩展不是一个好的方法,通常都是要求写扩展的人在某个地方写配置文件的。

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


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

Class.getGenericSuperclass()
--------------------编程问答-------------------- 用java的反谢,功能很强大 --------------------编程问答--------------------
引用 8 楼 softroad 的回复:
Java code

Class.getGenericSuperclass()

头像真不错 --------------------编程问答-------------------- 用反射是怎么用的,能不能举个例子? --------------------编程问答-------------------- 反射個毛啊,把類加載到內存,用instanceof比較一下不就知道了 --------------------编程问答-------------------- 說反射的倒是反射一個看看? --------------------编程问答--------------------

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);
}
}

當俺樓上的是放屁 --------------------编程问答-------------------- 这个必须限定范围,在项目的classpath里,某个jar包,或其他。

否则,你说说人文始祖黄帝的子孙有多少? --------------------编程问答-------------------- 5楼头像内涵了。。。 --------------------编程问答-------------------- 同求
另外12楼和13楼的你看清题目了吗?
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,