当前位置: 首页 > 面试题库 >

查找实现接口的Java类

杨飞飙
2023-03-14
问题内容

前一段时间,我遇到了一段代码,该代码使用了一些标准Java功能来定位实现给定接口的类。我知道这些函数隐藏在某些非逻辑的位置,但是由于包名称暗含,它们可以用于其他类。那时我不需要它,所以我忘记了它,但是现在我需要了,而且似乎无法再次找到这些函数。在哪里可以找到这些功能?

编辑:我不是在寻找任何IDE函数或任何东西,而是可以在Java应用程序中执行的东西。


问题答案:

不久前,我整理了一个程序包,可以做您想做的事情,以及更多。(我正在编写的实用程序需要它)。它使用ASM库。您可以使用反射,但事实证明ASM的性能更好。

我将程序包放在网站上的开源库中。该库位于:http : //software.clapper.org/javautil/。您要从 with ClassFinder类开始。

我为之编写的实用程序是我每天仍在使用的RSS阅读器,因此该代码的确易于使用。我使用ClassFinder在RSS阅读器中支持插件API。启动时,它将在几个目录树中查找jar和类文件,这些jar和类文件包含实现特定接口的类。它比您预期的要快得多。

该库是BSD许可的,因此您可以安全地将其与代码捆绑在一起。源可用。

如果这对您有用,请自助。

更新:如果您使用的是Scala,则可能会发现此库更加适合Scala。



 类似资料:
  • 问题内容: 我尝试使用Java ServiceLoader查找实现特定接口的所有类,如下所示: 不幸的是,当我在调试模式下运行Eclipse时,ServiceLoader找不到任何类。我觉得我错过了一个琐碎的事情… 问题答案: 无法做到。 为了将类公开为可以被发现的服务,您需要将其名称放入提供程序配置文件中,如使用Java平台创建可扩展应用程序中所述 。 没有内置的方法可以找到实现特定接口的所有类

  • 问题内容: 我正在开发一个应用程序(Quartz调度程序),其中有一个作业类负责实际执行工作,我们需要在Quartz调度程序中创建触发器时告知/传递作业类的名称。 我想为所有想使用该API的人提供一个扩展点(除了我将作为API的一部分提供的一些通用作业之外)。这个想法是创建一个(标记)接口,如果有人想将其类声明为调度程序作业类,那么他们要做的就是(声明)实现该接口。 我不确定如何找到合约之后的类(

  • 我正在尝试修改此链接中给出的Openmrs rest调用:https://github.com/openmrs/openmrs-module-webservices.rest/blob/master/omod-common/src/main/java/org/openmrs/module/webservices/rest/web/v1_0/controller/SessionController.

  • 问题内容: 有没有为接口方法创建默认实现的首选方法或样式?假设我有一个常用的接口,在90%的情况下,我想要的功能是相同的。 我的第一个直觉是用静态方法创建一个具体的类。然后,当我想要默认功能时,可以将功能委托给静态方法。 这是一个简单的示例: 接口 方法的具体实现 使用默认功能的具体实现 这里有更好的方法吗? 编辑 在看到了一些建议的解决方案之后,我认为我应该更加清楚自己的意图。本质上,我正在尝试

  • 我需要在我的Spring引导应用程序中找到只实现一个特定接口的类。我面临的问题是,ClassPathBean定义扫描仪正在返回实现“扩展”子接口的类。 示例: 以下是我目前使用的代码: 现在的结果是数组字符串“beans”包含所有其他类,如F、G、H、I、J等。 如何以只返回只实现指定接口的选定类的方式构造我的TypeFitler,即过滤掉应用扩展接口的所有实现。例如B类,但E类除外。 以下是将C

  • 我必须使用任何额外的关键字的id Param吗?什么是“!”签名里的刻薄?