2012-06-06 51 views
0

我一直在開發Android應用程序爲1個月左右,現在我得到相當熟悉Java的語法,但今天我偶然發現了這段代碼:這個Java語法是什麼意思? (`類<?延伸ContactAccessor> clazz`)

try { 
    Class<? extends ContactAccessor> clazz = 
         Class.forName(className).asSubclass(ContactAccessor.class); 
    sInstance = clazz.newInstance(); 
} catch (Exception e) { 
    throw new IllegalStateException(e); 
} 

有人可以解釋我是什麼Class<? extends ContactAccessor> clazz嗎?

回答

0

這意味着您有一個類是ContactAccessor類或該類或接口的子類。

既然你已經有ContactAccessor.class,我會假設你有一個子類。

0

這意味着您使用擴展特殊基類的類。這在Java中也被稱爲泛型。

2

Class用於反射。 <>表示通用類型。 ?是通用通配符。組合這意味着clazz代表作爲ContactAccessor的後裔的類的定義。爲進一步解釋,谷歌爲generics,wildcardsreflection

+1

+1解釋什麼'Class'實際上是。 –

0

這意味着您需要Class,它的類型是未知的(因此是?)。但是你知道它的一個屬性 - 它是ContactAccessor的一個子類。你需要找到那個特定的班級 - 所以你這樣做:Class.forName(className).asSubclass(ContactAccessor.class);說,通過它的班級,這是一個ContactAccessor的子類獲取我的班級。

0

這是Java泛型的一個例子(更多here)。這意味着clazz變量將是ContactAccessor的一種類型。

0

它定義了一個變量clazz,它是擴展ContactAccessor類的泛型類的一個Class對象。

0

使用通配符(「?」),以便該類只接受由ContactAccessor擴展的類,而不僅僅接受這些類,但也接受它們中的任何類。

0

任何等級的subclassContactAccessor類。