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等),编写或扩展自己的扫描仪非常简单。
经验分享 程序员 微信小程序 职场和发展