開始使用Reflection

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.