Java模組反射教程將解釋如何通過反射訪問Java類所屬的模組。
模組的概念是Java 9Java Platform Module System新增的。一個Java模組是一個Java包的集合。因此,每一個類都屬於一個包,且每一個包都屬於一個模組。
一個Java模組被java.base
模組的反射類java.lang.Module
代表。通過這個類可以和Java模組系統互動,獲得給定模組的資訊或者修改一個模組。本文將覆蓋通過反射類Module
可以做的一些操作。
獲得模組例項
可以通過Class
例項獲得Module
例項,像這樣:
Module myClassModule = MyClass.class.getModule();
是命名模組嗎?
你可以通過呼叫Module isNamed()
檢查一個Module
是否代表一個給定名稱的模組。這是示例程式碼:
boolean isNamed = myClassModule.isNamed();
是公開模組嗎?
你可以通過呼叫Module isOpen()
方法檢查一個模組是否是開放的, 這是示例程式碼:
boolean isOpen = myClassModule.isOpen();
獲得模組描述符
一旦你訪問了Module
例項,你可以通過getDescriptor()
方法訪問它的ModuleDescriptor
。這是通過getDescriptor()
訪問模組的ModuleDescriptor
的示例程式碼:
ModuleDescriptor descriptor = myClassModule.getDescriptor();
可以從ModuleDescriptor
獲得模組的更多描述資訊。Java模組反射教程將通過下面的章節討論可以從模組描述符中獲得的資訊。
模組名
你可以通過ModuleDescriptor name()
方法獲得模組名。這是示例程式碼:
String moduleName = descriptor.name();
匯出包
可以通過反射,ModuleDescriptor exports()
方法讀取模組的包列表。示例程式碼如下:
Set<ModuleDescriptor.Exports> exports = descriptor.exports();
是自動配置模組嗎?
你可以通過ModuleDescriptor isAutomatic()
方法檢查模組是否自動配置模組。示例程式碼如下:
boolean isAutomatic = descriptor.isAutomatic();
是公開模組嗎?
你可以通過ModuleDescriptor isOpen()
方法檢查模組是否是開放的,示例程式碼如下:
boolean isOpen = descriptor.isOpen();
模組中的包
你可以通過反射獲得一個給定模組的包列表。這是通過ModuleDescriptor packages()
方法實現的。示例程式碼如下:
Set packages = descriptor.packages();
使用的服務
你也可以通過反射讀取一個Java模組使用的服務。模組所使用的服務也被稱為模組的服務依賴關係。你可以通過ModuleDescriptor uses()
方法讀取模組服務的依賴。示例程式碼如下:
Set<String> uses = descriptor.uses();