传递泛型地图有什么问题

时间:2017-07-10 21:35:40

标签: java generics collections

我跟着在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>>)

为什么不起作用。我没有看到方法调用可能出错的任何事情。

1 个答案:

答案 0 :(得分:0)

您的问题是List<? extends WingMirror>声明。

通过在其签名中doSomething,您的WingMirror方法被声明为仅采用一种M extends WingMirror<T>子类型。但是汽车构造函数试图传递允许具有不同子类型WingMirror的列表。

例如,如果WingMirror有两个子类型SubWingMirror1SubWingMirror2doSomething只会采用仅包含SubWingMirror1SubWingMirror2但不包含两者的列表。但是List<? extends WingMirror>可以混合使用任何子类型。