java 类重复_查找实现接口的Java类[重复]
问题
这个问题在这里已有答案:
如何在Java中以编程方式获取接口的所有实现列表? 9个答案
前段时间,我遇到了一段代码,它使用了一些标准的Java功能来定位实现给定接口的类。我知道函数隐藏在一些非逻辑位置,但它们可以用于其他类,因为包含的名称是隐含的。那时我不需要它,所以我忘了它,但现在我做了,我似乎无法再找到这些功能。哪些功能可以找到?
编辑:我不是在寻找任何IDE函数或任何东西,而是可以在Java应用程序中执行的东西。
#1 热门回答(58 赞)
不久之前,我整理了一个包,用于做你想做的事情,等等。 (我需要它用于我正在编写的实用程序)。它使用了ASMlibrary。你可以使用反射,但ASM表现更好。
我编写的实用程序是一个RSS阅读器,我仍然每天使用它,所以代码确实倾向于运用。我使用ClassFinder来支持RSS阅读器中的插件API;在启动时,它在几个目录树中查找包含实现特定接口的类的jar和类文件。它比你想象的要快得多。
如果这对你有用,请自己帮忙。
更新:如果你正在使用Scala,你可能会发现this library更适合Scala。
#2 热门回答(47 赞)
春天可以为你做到这一点......
BeanDefinitionRegistry bdr = new SimpleBeanDefinitionRegistry();
ClassPathBeanDefinitionScanner s = new ClassPathBeanDefinitionScanner(bdr);
TypeFilter tf = new AssignableTypeFilter(CLASS_YOU_WANT.class);
s.addIncludeFilter(tf);
s.scan("package.you.want1", "package.you.want2");
String[] beans = bdr.getBeanDefinitionNames();
注:如果你想要正确的结果,TypeFilter很重要!你也可以在此处使用排除过滤器。
Scanner可以在spring-context jar中找到,spring-beans中的注册表,类型过滤器是spring-core。
#3 热门回答(25 赞)
它提供了许多不同类型的扫描仪(getTypesAnnotatedWith,getSubTypesOf等),编写或扩展自己的扫描仪非常简单。
问题 这个问题在这里已有答案: 如何在Java中以编程方式获取接口的所有实现列表? 9个答案 前段时间,我遇到了一段代码,它使用了一些标准的Java功能来定位实现给定接口的类。我知道函数隐藏在一些非逻辑位置,但它们可以用于其他类,因为包含的名称是隐含的。那时我不需要它,所以我忘了它,但现在我做了,我似乎无法再找到这些功能。哪些功能可以找到? 编辑:我不是在寻找任何IDE函数或任何东西,而是可以在Java应用程序中执行的东西。 #1 热门回答(58 赞) 不久之前,我整理了一个包,用于做你想做的事情,等等。 (我需要它用于我正在编写的实用程序)。它使用了ASMlibrary。你可以使用反射,但ASM表现更好。 我编写的实用程序是一个RSS阅读器,我仍然每天使用它,所以代码确实倾向于运用。我使用ClassFinder来支持RSS阅读器中的插件API;在启动时,它在几个目录树中查找包含实现特定接口的类的jar和类文件。它比你想象的要快得多。 如果这对你有用,请自己帮忙。 更新:如果你正在使用Scala,你可能会发现this library更适合Scala。 #2 热门回答(47 赞) 春天可以为你做到这一点...... BeanDefinitionRegistry bdr = new SimpleBeanDefinitionRegistry(); ClassPathBeanDefinitionScanner s = new ClassPathBeanDefinitionScanner(bdr); TypeFilter tf = new AssignableTypeFilter(CLASS_YOU_WANT.class); s.addIncludeFilter(tf); s.scan("package.you.want1", "package.you.want2"); String[] beans = bdr.getBeanDefinitionNames(); 注:如果你想要正确的结果,TypeFilter很重要!你也可以在此处使用排除过滤器。 Scanner可以在spring-context jar中找到,spring-beans中的注册表,类型过滤器是spring-core。 #3 热门回答(25 赞) 它提供了许多不同类型的扫描仪(getTypesAnnotatedWith,getSubTypesOf等),编写或扩展自己的扫描仪非常简单。