反射中若干問題

一 獲取類引用的方法

 

   (1) getClass() 獲取已經初始化的對象的一個Class引用。

   (2) Class.forName() 告訴編譯器,如果類沒有加載,就加載它。 

   (3) .class 字面常量 這個性能會更好,第一它增加了編譯時的類型強制檢查,第二它沒有做對forName()方法的調用。

 

二 巧妙地利用編譯器爲我們做一些Class引用的類型檢查。

 

 

   我們如果使用平凡的Class對象,實際上它可以被一切Class對象引用賦值。

   爲了增加類型檢查,我們可以把Class對象當作一個泛型模板。強制使用Class<?>來提醒編譯器進行類型檢查。

   ?在這裏指的是某種類型。

    弔詭的一個地方:

 

 

 

      Class<Number> c = int.class //編譯不通過。

  
 Class<? extends Number> c = int.class //編譯纔會通過。
 

     Class<?> 與 Class在使用上沒有差別,但是有意識地加上這個?表明我已經注意到了這個地方必須類型檢查,而我放心使用這種寬泛的類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章