gpt4 book ai didi

java - 如何在运行时测试可选模块是否存在

转载 作者:行者123 更新时间:2023-12-01 14:32:19 24 4
gpt4 key购买 nike

Java 平台模块系统 (JPMS) 允许模块使用 module-info.java 文件中的 requires static 声明可选依赖项:

module my.module {
requires static some.optional.module;
}

但是,您应该如何在代码中检查模块在运行时是否存在?

Project Jigsaw: Optional Modules建议页面:

public boolean isModulePresent(String mn);

但是,它似乎被删除了,因为在最新的 Java 版本中没有这样的方法。我也找不到在当前 Java 版本中提到的 @RequireOptionalModule 注释。

This example on blog@CodeFX建议在 StackWalker 上使用一个非常冗长的方法链(解释为 here )。
编辑:该示例试图找出模块是否可用于调用者类,这在我的情况下不是必需的。

是否有更简单的方法来执行此检查,或者如果某个类的存在表明存在模块,则简单的 Class.forName 检查是否就足够了?

最佳答案

要查明某些模块在运行时是否可用,您可以简单地调用ModuleLayer.findModule()。 :

Optional<Module> module = ModuleLayer.boot().findModule("java.desktop");
System.out.println(module.isPresent());
如果您知道模块中某个特定类的名称,

Class.forName() 也应该有效。但是,如果找不到类,forName() 将抛出 ClassNotFoundException。这意味着您必须用 try-catch 包围它才能使其工作。这不是很方便。

关于java - 如何在运行时测试可选模块是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61703051/

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