我跟着在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>>)
为什么不起作用。我没有看到方法调用可能出错的任何事情。
答案 0 :(得分:0)
您的问题是List<? extends WingMirror>
声明。
通过在其签名中doSomething
,您的WingMirror
方法被声明为仅采用一种M extends WingMirror<T>
子类型。但是汽车构造函数试图传递允许具有不同子类型WingMirror
的列表。
例如,如果WingMirror
有两个子类型SubWingMirror1
和SubWingMirror2
。 doSomething
只会采用仅包含SubWingMirror1
或SubWingMirror2
但不包含两者的列表。但是List<? extends WingMirror>
可以混合使用任何子类型。