[英]What does this Java syntax mean? (` Class<? extends E> clazz`)
[英]What does this Java syntax mean? (`Class<? extends ContactAccessor> clazz`)
我已經開發了大約1個月的Android應用程序,現在我對Java語法非常熟悉,但今天我偶然發現了這段代碼:
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
Class<? extends ContactAccessor> clazz
嗎?
Class
用於反射。 <>
表示泛型類型。 ?
是一個通用的通配符。 結合這意味着clazz
表示類的定義,該類是ContactAccessor
的后代。 有關進一步說明,谷歌搜索generics
, wildcards
和reflection
。
這意味着您使用擴展特殊基類的類。 這在Java中也稱為泛型。
這意味着你需要的Class
,它的類型是未知的(因此?
)。 但是你知道它的一個屬性 - 它是ContactAccessor
的子類。 你需要找到那個特定的類 - 所以你這樣做: Class.forName(className).asSubclass(ContactAccessor.class);
通過它的類獲取類,它是ContactAccessor
的子類。
這是Java Generics的一個例子(更多這里 )。 這意味着clazz
變量將是一個擴展ContactAccessor
的類型。
這意味着您有一個Class,它是ContactAccessor類或該類或接口的子類。
既然你已經有了ContactAccessor.class
,我會假設你有一個子類。
它定義了一個變量clazz
,它是擴展ContactAccessor
類的泛型類的Class
對象。
使用通配符(“?”),以便Class只接受ContactAccessor擴展的類,只接受它們中的任何一個。
任何類都是ContactAccessor
類的subclass
類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.