[英]What's wrong with passing generics map
我跟隨在Car類的構造函數中調用:
public Car(Map<String, ? extends List<? extends WingMirror>> wingMirrorMap) {
doSomething(wingMirrorMap); // Here i have error
}
private static <L extends List<M>, M extends WingMirror<T>, T> Map<String, L> doSomething (Map<String, L> wingMirrorMap) {
// Do something with wingMirrorMap
}
通過傳遞參數wingMirrorMap我遵循了錯誤:
The method doSomething(Map<String,L>) in the type Car is not applicable for the arguments (Map<String,capture#2-of ? extends List<? extends WingMirror>>)
為什么不起作用。 我看不到任何方法調用可能出錯的地方。
您的問題是List<? extends WingMirror>
List<? extends WingMirror>
聲明。
通過讓M extends WingMirror<T>
在其簽名中M extends WingMirror<T>
,聲明您的doSomething
方法僅采用WingMirror
的一種子類型。 但是汽車構造函數正在嘗試傳遞允許具有不同WingMirror
子類型的WingMirror
。
例如,如果您有WingMirror
兩個子類型為SubWingMirror1
和SubWingMirror2
。 doSomething
將僅采用僅具有SubWingMirror1
或SubWingMirror2
而沒有兩者的列表。 但是List<? extends WingMirror>
List<? extends WingMirror>
可以混合使用兩種子類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.