摘要:每次看到很多人使用原生的反射接口,我心里都在想,愚蠢的人類啊,為什么不封裝一下再用。幸運的是類的封裝已經幫你實現了。
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 學習具體的技術工具的好辦法就是些Demo、造輪子。所以,我實現了一個稱為BeanMap的類來應用java反射API。 這個BeanMap的功能是將一個Bean包裝...
摘要:筆記來源反射綜述類的使用方法的反射成員變量的反射構造函數的反射類加載機制類的使用在面向對象的世界里,萬事萬物皆對象。 筆記來源:IMOOC 反射 Java Reflect 綜述 Class類的使用 方法的反射 成員變量的反射 構造函數的反射 類加載機制 Class 類的使用 在面向對象的世界里,萬事萬物皆對象。 但在Java里面有兩樣東西不是對象:靜態的成員、普通數據類型類...
摘要:但是模塊化當中,無法掃描只有模塊中可以使用有兩種解決方案定義一個專門的資源模塊,并使用提供的接口,實現它,并將這個實現注冊為服務。有兩種方式使用或包名,包名模塊名使用運行時動態。 模塊設計的原則: 1、防止出現編譯時循環依賴(主要是編譯器不支持),但運行時是允許循環依賴的,比如GUI應用2、明確模塊的邊界 幾種模塊設計: API模塊,聚合模塊(比如java.base) 可選依賴 兩種方...
摘要:我們找到了許多有趣的工具和組件用來檢測狀態的各個方面,其中一個就是在運行期通過反射了解內部機制。由于包含多種的實現,就是供具體實現比如必須繼承的抽象類。調試器框架是可擴展的,這意味著可以通過繼承這個抽象類來使用另一個調試器。 在日常工作中,我們都習慣直接使用或者通過框架使用反射。在沒有反射相關硬編碼知識的情況下,這是Java和Scala編程中使用的類庫與我們的代碼之間進行交互的一種主要...
閱讀 1599·2021-11-22 09:34
閱讀 1690·2019-08-29 16:36
閱讀 2668·2019-08-29 15:43
閱讀 3113·2019-08-29 13:57
閱讀 1298·2019-08-28 18:05
閱讀 1875·2019-08-26 18:26
閱讀 3243·2019-08-26 10:39
閱讀 3455·2019-08-23 18:40