gpt4 book ai didi

Java:在程序启动时查找具有特定基类型的类

转载 作者:行者123 更新时间:2023-11-29 05:11:24 24 4
gpt4 key购买 nike

我有一个 Java 程序(具体来说是一个 Eclipse 插件),它使用了几个 JAR 文件(我可以控制)。其中一个核心 JAR 文件定义了一个名为 Strategy抽象类。当用户启动程序时,程序需要知道程序 ClassPathStrategy 的所有子类。

正如我在 this StackOverflow question 中所描述的那样,我尝试在子类上使用静态初始化程序 block ,以便它们在注册表中自动注册。这种方法不起作用,因为在我显式使用该类之前未执行静态初始值设定项。

是否有任何其他方法可以找到当前 ClassPath 上具有特定基类型的所有类?

我可以想到以下解决方案:

  • 遍历特定目录下的所有JAR并检查它们包含的类
  • 创建一个在程序启动时加载的文件并从中读取类名

我可以自己实现它们(所以我不要求这里提供任何代码示例)。我只想知道我是否缺少其他选择。任何同类解决方案(比如我尝试使用静态初始化程序的解决方案)都将不胜感激。

最佳答案

如果您愿意使用第三方库,Reflections似乎最适合这里。它是一个 Java 运行时元数据分析库,适合执行此操作。来自他们的网站:

Using Reflections you can query your metadata such as:

  • get all subtypes of some type
  • get all types/constructos/methods/fields annotated with some annotation, optionally with annotation parameters matching
  • get all resources matching matching a regular expression
  • get all methods with specific signature including parameters, parameter annotations and return type

您只需在 StrategyRegistrar 类中创建一个配置好的 Reflections 实例即可

Reflections reflections = new Reflections(
new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage("com.your.app.strategies.pkg"))
.setScanners(new SubTypesScanner())
);

然后简单地触发一个查询

Set<Class<? extends Strategy>> strategies =
reflections.getSubTypesOf(com.your.app.strategies.pkg.Strategy.class);

关于Java:在程序启动时查找具有特定基类型的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28303968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com