摘要:模塊反射教程將解釋如何通過反射訪問類所屬的模塊。模塊的概念是添加的。模塊反射教程將通過下面的章節(jié)討論可以從模塊描述符中獲得的信息。這是示例代碼導(dǎo)出包可以通過反射,方法讀取模塊的包列表。模塊所使用的服務(wù)也被稱為模塊的服務(wù)依賴關(guān)系。
Java模塊反射教程將解釋如何通過反射訪問Java類所屬的模塊。
模塊的概念是Java 9Java Platform Module System添加的。一個Java模塊是一個Java包的集合。因此,每一個類都屬于一個包,且每一個包都屬于一個模塊。
一個Java模塊被java.base模塊的反射類java.lang.Module 代表。通過這個類可以和Java模塊系統(tǒng)交互,獲得給定模塊的信息或者修改一個模塊。本文將覆蓋通過反射類Module可以做的一些操作。
可以通過Class實例獲得Module實例,像這樣:
Module myClassModule = MyClass.class.getModule();是命名模塊嗎?
你可以通過調(diào)用Module isNamed()檢查一個Module是否代表一個給定名稱的模塊。這是示例代碼:
boolean isNamed = myClassModule.isNamed();是公開模塊嗎?
你可以通過調(diào)用Module isOpen()方法檢查一個模塊是否是開放的, 這是示例代碼:
boolean isOpen = myClassModule.isOpen();獲得模塊描述符
一旦你訪問了Module實例,你可以通過getDescriptor()方法訪問它的ModuleDescriptor。這是通過getDescriptor()訪問模塊的ModuleDescriptor的示例代碼:
ModuleDescriptor descriptor = myClassModule.getDescriptor();
可以從ModuleDescriptor獲得模塊的更多描述信息。Java模塊反射教程將通過下面的章節(jié)討論可以從模塊描述符中獲得的信息。
模塊名你可以通過ModuleDescriptor name()方法獲得模塊名。這是示例代碼:
String moduleName = descriptor.name();導(dǎo)出包
可以通過反射,ModuleDescriptor exports() 方法讀取模塊的包列表。示例代碼如下:
Set是自動配置模塊嗎?exports = descriptor.exports();
你可以通過ModuleDescriptor isAutomatic() 方法檢查模塊是否自動配置模塊。示例代碼如下:
boolean isAutomatic = descriptor.isAutomatic();是公開模塊嗎?
你可以通過ModuleDescriptor isOpen() 方法檢查模塊是否是開放的,示例代碼如下:
boolean isOpen = descriptor.isOpen();模塊中的包
你可以通過反射獲得一個給定模塊的包列表。這是通過ModuleDescriptor packages() 方法實現(xiàn)的。示例代碼如下:
Set packages = descriptor.packages();使用的服務(wù)
你也可以通過反射讀取一個Java模塊使用的服務(wù)。模塊所使用的服務(wù)也被稱為模塊的服務(wù)依賴關(guān)系。你可以通過ModuleDescriptor uses() 方法讀取模塊服務(wù)的依賴。示例代碼如下:
Setuses = descriptor.uses();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/71700.html
摘要:但是模塊化當(dāng)中,無法掃描只有模塊中可以使用有兩種解決方案定義一個專門的資源模塊,并使用提供的接口,實現(xiàn)它,并將這個實現(xiàn)注冊為服務(wù)。有兩種方式使用或包名,包名模塊名使用運行時動態(tài)。 模塊設(shè)計的原則: 1、防止出現(xiàn)編譯時循環(huán)依賴(主要是編譯器不支持),但運行時是允許循環(huán)依賴的,比如GUI應(yīng)用2、明確模塊的邊界 幾種模塊設(shè)計: API模塊,聚合模塊(比如java.base) 可選依賴 兩種方...
摘要:模塊系統(tǒng)的前身是項目。最初,該項目僅僅是為設(shè)計實現(xiàn)一個模塊系統(tǒng)。隨著項目的不斷深入,平臺對標準模塊系統(tǒng)的呼求也日益增長,批準該項目升級為平臺的一部分,也能服務(wù)于和平臺的需求。自定義的配置,僅包含一組指定的模塊及其所需的模塊。 我的博客 轉(zhuǎn)載請注明原創(chuàng)出處。 序 從Java 9開始,在Java的世界里多了一個叫模塊(JSR376)的特性。模塊系統(tǒng)的前身是Jigsaw項目。最初,該項目僅...
近期在維護公司項目的時候遇到一個問題,因為實體類中的 set 方法涉及到了業(yè)務(wù)邏輯,因此在給對象賦值的過程中不能夠使用 set 方法,為了實現(xiàn)功能,所以采用了反射的機制給對象屬性賦值,借此機會也了解了反射的一些具體用法和使用場景,分以下兩點對反射進行分析: 反射的優(yōu)勢和劣勢 反射的應(yīng)用場景 反射的優(yōu)勢和劣勢 ??個人理解,反射機制實際上就是上帝模式,如果說方法的調(diào)用是 Java 正確的打開方式...
摘要:我們找到了許多有趣的工具和組件用來檢測狀態(tài)的各個方面,其中一個就是在運行期通過反射了解內(nèi)部機制。由于包含多種的實現(xiàn),就是供具體實現(xiàn)比如必須繼承的抽象類。調(diào)試器框架是可擴展的,這意味著可以通過繼承這個抽象類來使用另一個調(diào)試器。 在日常工作中,我們都習(xí)慣直接使用或者通過框架使用反射。在沒有反射相關(guān)硬編碼知識的情況下,這是Java和Scala編程中使用的類庫與我們的代碼之間進行交互的一種主要...
摘要:與都繼承自類,在中也是使用字符數(shù)組保存字符串,,這兩種對象都是可變的。采用字節(jié)碼的好處語言通過字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,同時又保留了解釋型語言可移植的特點。 String和StringBuffer、StringBuilder的區(qū)別是什么?String為什么是不可變的? String和StringBuffer、StringBuilder的區(qū)別 可變性...
閱讀 3451·2021-11-04 16:10
閱讀 3960·2021-09-29 09:43
閱讀 2774·2021-09-24 10:24
閱讀 3644·2021-09-01 10:46
閱讀 2570·2019-08-30 15:54
閱讀 677·2019-08-30 13:19
閱讀 3300·2019-08-29 17:19
閱讀 1122·2019-08-29 16:40