![](/img/trans.png)
[英]Why can't I use the wildcard (?) as type of parameter, field, local variable, or as return type of a method?
[英]Why can't I use multiple type parameters with a wildcard?
例如:為什么我不能這樣做(I1和I2是兩個接口):
List<? extends I1 & I2> myList;
請注意,我不希望添加一個擴展I1和I2的新接口,因為它沒有任何附加功能,並且只是一個占位符
兩個原因:
第一個是因為Java不支持多重繼承。
第二個是因為這意味着您無法返回具有多種類型的對象。
例如,想象一下myList.get(i)方法。 您的示例中應該具有哪種返回類型? 它必須是I1或I2,它不能兩者兼而有之。
您可以定義一個實現I1和I2的接口,然后使用它 - 但是添加到列表中的所有對象都需要實現新接口。 添加實現I1和I2但不是新接口的東西仍然無效。
忘記泛型並嘗試編寫返回I1和I2的.get()的方法存根 - 你不能這樣做,它在Java中是不合法的。 泛型不允許你這樣做,因為沒有辦法將生成的代碼轉換為合法的Java代碼。 有關為什么Java僅支持單繼承的更詳細討論,因為它是更大討論的一部分。
Java不支持它。 你可以通過定義一個將由I1
和I2
擴展的interface I3
來實現這一點
您可以定義自己的新接口,以獲得相同的結果:
interface ABList<T extends A & B> extends List<T> {
}
....
ABList<X> abList = ...;
您必須記住,泛型不是嘗試擴展現有的Java參數匹配系統。 它更像是一種收緊編譯時參數檢查的方法,在這種情況下,您通常會嘗試在運行時進行轉換,並冒着類轉換異常的風險。 用?
在仿制葯中應該是非常罕見的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.