原文地址:http://tutorials.jenkov.com/java-reflection/index.html
*By Jakob Jenkov
Java的反射機制使得它可以在運行時檢查類、接口、字段、方法,而在編譯時並不不知道它們的名稱。也可以通過反射實例化新的對象,調用方法,get/set字段的值。
Java的反射機制非常強大而且非常有用。對實例而言,在運行時可以映射對象到數據庫中的表,就和 Butterfly Persistence 做的一樣。或者,在運行時將腳本中的語句映射到真實對象上的方法調用,就和 Butterfly Container 在解析它的配置腳本時做的一樣。
在互聯網上已經有很多關於Java反射的教程了。然而,包括Sun公司提供的在內,大多數Java反射教程都只涉及了Java反射的表面和Java反射機制的可能性。
本教程將比我之前看到的大多數教程更深層次的觸及Java的反射機制。我將解釋Java反射的基本知識,包括如何使用數組、注解、泛型、動態代理、類的動態加載和重新加載。也會告訴你該如何做一些比較具體的事情,如讀取類的所有getter方法,或者訪問類的私有字段和方法。本教程也會澄清一些在運行時哪些泛型信息可用的困惑。有些人聲稱,所有的泛型信息在運行時都丟失了。這中理解是不對的。
本教程將基於Java 6介紹Java的反射機制。
- Java反射例子
在這里有一個快速使用Java反射的例子展示了使用反射時的樣子:
1 Method[] methods = MyObject.class.getMethods(); 2 for(Method method : methods){ 3 System.out.println("method = " + method.getName()); 4 }
在這個例子中得到了MyObject的Class對象。這個例子通過Class對象獲取了MyObject類中的方法列表,並且迭代打印出了各個方法的方法名。
這一切究竟是如何工作將在整個教程的剩余部分中進一步闡述(在其他文章中)。
- 目錄
這是一個本教程到目前為止涵蓋的主題列表:
- Java反射——引言
- Java反射——Class對象
- Java反射——構造函數
- Java反射——字段
- Java反射——方法
- Java反射——Getter和Setter
- Java反射——私有字段和私有方法
- Java反射——注解
- Java反射——泛型
- Java反射——數組
- Java反射——動態代理
- Java反射——類的動態加載和重新加載
(敬請期待下一篇翻譯)