簡體   English   中英

如何在運行時測試可選模塊是否存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM