![]() |
1
46
我已经寻找了一段时间,似乎有不同的方法,这里有一个总结:
此外,还有其他基于URLClassLoader的方法,除非执行基于目录的搜索,否则这些方法将始终限于已加载的类。 |
![]() |
2
28
埃里克森说了什么,但如果你还想做,那就看看 Reflections . 从他们的页面:
|
![]() |
3
26
如果你想避免这种情况,你需要实现你自己的类文件解析器,它的运行效率更高,而不是反射。字节码工程库可能有助于这种方法。
这个
Service Provider mechanism
|
![]() |
4
13
Spring有一个非常简单的方法来实现这一点:
|
![]() |
5
4
是的,第一步是确定“所有”你关心的类。如果您已经拥有这些信息,则可以枚举它们中的每一个,并使用instanceof验证关系。相关文章如下: http://www.javaworld.com/javaworld/javatips/jw-javatip113.html |
![]() |
6
4
埃里克森说的最好。这里有一个相关的问答线索- http://www.velocityreviews.com/forums/t137693-find-all-implementing-classes-in-classpath.html Apache BCEL库允许您在不加载类的情况下读取类。我相信它会更快,因为你应该能够跳过验证步骤。使用类加载器加载所有类的另一个问题是,您将受到巨大的内存影响,并且会无意中运行任何您可能不想执行的静态代码块。 |
![]() |
7
2
一个新版本的@kaybee99的答案,但现在返回用户的要求:实现。。。
然后可以自动连接类型列表
|
![]() |
8
2
与 ClassGraph 很简单:
|
![]() |
9
2
列出实现给定接口的所有类的最健壮机制是 ClassGraph widest possible array of classpath specification mechanisms ,包括新的JPMS模块系统。(我是作者。)
|
![]() |
10
1
另外,如果您正在编写一个IDE插件(在这个插件中,您试图做的事情相对比较常见),那么IDE通常会为您提供更有效的方法来访问用户代码当前状态的类层次结构。 |
![]() |
11
1
我遇到了同样的问题。我的解决方案是使用反射来检查ObjectFactory类中的所有方法,消除那些不是createXXX()方法的方法,这些方法返回我绑定的一个pojo的实例。这样发现的每个类都被添加到一个class[]数组中,然后传递给JAXBContext实例化调用。这执行得很好,只需要加载ObjectFactory类,无论如何都将需要它。我只需要维护ObjectFactory类,这是一个手工执行的任务(在我的例子中,因为我从pojo开始并使用schemagen),或者可以根据xjc的需要生成。无论哪种方式,它都是高效的、简单的。 |
![]() |
Gabe Tucker · 无法在golang中分配接口对象指针 3 年前 |
![]() |
randomDud · C#从另一个接口重写接口方法 3 年前 |
![]() |
evilsushi · C#接口不允许成员类满足要求 7 年前 |