[英]How to test whether an optional module is present at runtime
Java 平台模塊系統 (JPMS) 允許模塊使用module-info.java
文件中的requires static
聲明可選依賴項:
module my.module {
requires static some.optional.module;
}
但是,您應該如何在代碼中檢查該模塊在運行時是否存在?
拼圖項目:可選模塊頁面建議:
public boolean isModulePresent(String mn);
但是,它似乎已被刪除,因為在最新的 Java 版本中沒有這種方法。 我也找不到當前 Java 版本中提到的@RequireOptionalModule
注釋。
blog@CodeFX 上的這個例子暗示了StackWalker
上的一個非常冗長的方法鏈( 在此處進行了解釋)。
編輯:該示例試圖找出調用者 class 是否可以使用模塊,這在我的情況下不是必需的。
是否有更簡單的方法來執行此檢查,或者如果某個 class 的存在表明模塊存在,那么簡單的Class.forName
檢查就足夠了嗎?
要了解某個模塊在運行時是否可用,您可以簡單地調用ModuleLayer.findModule() :
Optional<Module> module = ModuleLayer.boot().findModule("java.desktop");
System.out.println(module.isPresent());
如果您從模塊中知道某些特定 class 的名稱, Class.forName()
也應該可以工作。 但是,如果未找到 class, forName()
將引發ClassNotFoundException
。 這意味着您必須用try-catch
將其包圍才能使其工作。 這不是很方便。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.