一 獲取類引用的方法
(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在使用上沒有差別,但是有意識地加上這個?表明我已經注意到了這個地方必須類型檢查,而我放心使用這種寬泛的類型。