標籤:oid stat 解決 必須 mda name for 類對象 方式
用於 reflection 的類,如 Method,可以在 java.lang.relfect 包中找到。使用這些類的時候必須要遵循三個步驟:第一步是獲得你想操作的類的 java.lang.Class 對象。在運行中的 Java 程式中,用 java.lang.Class 類來描述類和介面等。
下面就是獲得一個 Class 對象的方法之一:
Class c = Class.forName("java.lang.String");
這條語句得到一個 String 類的類對象。還有另一種方法,如下面的語句:
Class c = int.class;
或者
Class c = Integer.TYPE;
它們可獲得基本類型的類資訊。其中後一種方法中訪問的是基本類型的封裝類 (如 Integer) 中預先定義好的 TYPE 欄位。
第二步是調用諸如 getDeclaredMethods 的方法,以取得該類中定義的所有方法的列表。
一旦取得這個資訊,就可以進行第三步了——使用 reflection API 來操作這些資訊,如下面這段代碼:
Class c = Class.forName("java.lang.String");Method m[] = c.getDeclaredMethods();System.out.println(m[0].toString());
它將以文本方式列印出 String 中定義的第一個方法的原型。
在下面的例子中,這三個步驟將為使用 reflection 處理特殊應用程式提供例證。
類比 instanceof 操作符
得到類資訊之後,通常下一個步驟就是解決關於 Class 對象的一些基本的問題。例如,Class.isInstance 方法可以用於類比 instanceof 操作符:
class A {}public class instance1 { public static void main(String args[]) { try { Class cls = Class.forName("A"); boolean b1 = cls.isInstance(new Integer(37)); System.out.println(b1); boolean b2 = cls.isInstance(new A()); System.out.println(b2); } catch (Throwable e) { System.err.println(e); } }}
在這個例子中建立了一個 A 類的 Class 對象,然後檢查一些對象是否是 A 的執行個體。Integer(37) 不是,但 new A()是。
開始使用Reflection