国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java反射的封裝

raledong / 3107人閱讀

摘要:每次看到很多人使用原生的反射接口,我心里都在想,愚蠢的人類啊,為什么不封裝一下再用。幸運的是類的封裝已經幫你實現了。

Java這種以啰嗦著稱的編程語言,反射代碼也很啰嗦。每次看到很多人使用原生的反射接口,我心里都在想,愚蠢的人類啊,為什么不封裝一下再用。

能用到反射的場景

不能靜態決定,比如根據URL參數的字符串調用相應方法的時候。

避免樣板代碼的時候,例如可以用反射代替,繁瑣的JSON對象解析代碼。

避免顯式依賴的時候,有時候能用來打破項目之間的循環依賴關系。但要慎用,如果之間接口比較復雜,還是建議多帶帶使用協議接口的方法。

訪問私有成員,做一些黑科技的事情的時候。

方法調用封裝

封裝前的反射調用方法:

try {
  Class class = obj.getClass();
  Method method = class.getDeclaredMethod("foo", new Class[] { String.class });
  method.invoke(obj, new Object[] {"hi"});
} catch (Exceptione ex) {
}

非反射直接調用:

obj.foo("hi");

封裝后的反射調用:

Reflection.callMethod(obj, "foo", "hi");
字段賦值封裝

封裝前的反射調用方法:

try {
  Class class = obj.getClass();
  Field field = class.getDeclaredField("bar");
  field.setAccessible(true);
  Object old = field.get(obj);
  field.set(obj, "hi");
  return old;
} catch (Exceptione ex) {
}

非反射直接字段賦值:

obj.bar = "hi";

封裝后字段賦值:

Reflection.setField(obj, "bar", "hi");
源碼

Talk is cheap, show me the code.

這里是我簡單的反射封裝代碼,不是很完整,只是解決了目前自己的需求。源碼也就100行,自己看吧。

有Declared和無Declared的區別

在Class類接口中,getDeclaredMethod getDeclaredField和getMethod getField的區別。
帶Declared的包含本類的私有和公開成員,不包含繼承的成員。不帶Declare不含繼承的和自身的公開成員,不包含私有成員。
如果要訪問全體的成員,包括所有繼承的和私有的,那么代碼只會更加復雜。幸運的是Reflection類的封裝已經幫你實現了。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65964.html

相關文章

  • 封裝BeanMap以及java反射和內省

    摘要:所以,我實現了一個稱為的類來應用反射。現在流行的語言大都支持反射。這組內省主要是針對類進行操作的,能夠獲取類的屬性信息。可以看到,通過的內省機制,解決了的最關鍵的問題。在封裝反射的時候,會充分考慮到各種情況。 BeanMap 學習具體的技術工具的好辦法就是些Demo、造輪子。所以,我實現了一個稱為BeanMap的類來應用java反射API。 這個BeanMap的功能是將一個Bean包裝...

    張巨偉 評論0 收藏0
  • Java反射Java 泛型基礎

    摘要:筆記來源反射綜述類的使用方法的反射成員變量的反射構造函數的反射類加載機制類的使用在面向對象的世界里,萬事萬物皆對象。 筆記來源:IMOOC 反射 Java Reflect 綜述 Class類的使用 方法的反射 成員變量的反射 構造函數的反射 類加載機制 Class 類的使用 在面向對象的世界里,萬事萬物皆對象。 但在Java里面有兩樣東西不是對象:靜態的成員、普通數據類型類...

    seanHai 評論0 收藏0
  • Java9模塊化學習筆記二之模塊設計模式

    摘要:但是模塊化當中,無法掃描只有模塊中可以使用有兩種解決方案定義一個專門的資源模塊,并使用提供的接口,實現它,并將這個實現注冊為服務。有兩種方式使用或包名,包名模塊名使用運行時動態。 模塊設計的原則: 1、防止出現編譯時循環依賴(主要是編譯器不支持),但運行時是允許循環依賴的,比如GUI應用2、明確模塊的邊界 幾種模塊設計: API模塊,聚合模塊(比如java.base) 可選依賴 兩種方...

    李文鵬 評論0 收藏0
  • 在運行期通過反射了解JVM內部機制

    摘要:我們找到了許多有趣的工具和組件用來檢測狀態的各個方面,其中一個就是在運行期通過反射了解內部機制。由于包含多種的實現,就是供具體實現比如必須繼承的抽象類。調試器框架是可擴展的,這意味著可以通過繼承這個抽象類來使用另一個調試器。 在日常工作中,我們都習慣直接使用或者通過框架使用反射。在沒有反射相關硬編碼知識的情況下,這是Java和Scala編程中使用的類庫與我們的代碼之間進行交互的一種主要...

    crossea 評論0 收藏0

發表評論

0條評論

raledong

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<