[英]What does this Java syntax mean? (`Class<? extends ContactAccessor> clazz`)
[英]What does this Java syntax mean? (` Class<? extends E> clazz`)
我需要一個自定義方法來檢查包含類實例的列表並調用此方法,但我不理解此語法“Class clazz”,我不明白此方法的第二個參數是什么
public static <E> boolean containsInstanceOfOidInrArraylist(List<E> Arraylist, Class<? extends E> clazz) {
for (E e : Arraylist) {
if (clazz.isInstance(e)) {
return true;
}
}
return false;
}
好的,所以該函數的第一個參數是一個名為Arraylist
的List<E>
(您不應該在 Java arrayList
變量大寫,將其命名為arrayList
)。
第二個參數是一個Class<? extends E>
Class<? extends E>
命名為clazz
。
Class
是一個可參數化的類,因此您可以使用語法Class<T>
其中T
是一種類型。 通過編寫Class<?>
,您聲明了一個可以是任何類型的Class
對象(?
是通配符)。Class
類型是一種包含有關類的元信息的類型。
所以現在你知道Class<?>
是什么意思了,但是Class<? extends E>
Class<? extends E>
?
<? extends E>
<? extends E>
基本上意味着任何擴展 E(或 E 本身)的類。
所以Class<? extends E> clazz
Class<? extends E> clazz
意味着你有一個名為varaible clazz
是E
類或子類的E
。
請參閱本教程: https : //docs.oracle.com/javase/tutorial/java/generics/upperBounded.html
"上界通配符
您可以使用上限通配符來放寬對變量的限制。 例如,假設您想編寫一個適用於List<Integer>
、 List<Double>
和List<Number>
; 您可以通過使用上限通配符來實現這一點。
要聲明上限通配符,請使用通配符 ('?'),后跟 extends 關鍵字,然后是其上限。 請注意,在此上下文中,extends 在一般意義上用於表示“擴展”(如在類中)或“實現”(如在接口中)。
第二個參數是一個與列表中對象的類相同的類,或者擴展它。 clazz 用作變量名,因為 class 是保留關鍵字,不能使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.