为什么需要显式转换泛型调用?
假设我有以下内容:
public <T extends Widget> List<T> first(T n) {
return first(n.getClass());
}
public <T extends Widget> List<T> first(Class<T> n) {
return new ArrayList<>();
}
编译器在第 3 行用 “” 进行报错。我不明白为什么。在我看来,除了子类型之外,该类型在任何一种情况下都不可能改变,这似乎是合理的。incompatible types; required: java.util.List<T>; found: java.util.List<capture#1 of ? extends my.app.Widget>
T
这可以通过显式转换来解决,尽管我不知道为什么需要它。
public <T extends Widget> List<T> first(T n) {
return (List<T>)first(n.getClass());
}
public <T extends Widget> List<T> first(Class<T> n) {
return new ArrayList<>();
}
这可能是编译器错误吗?
注意:我使用的是 JDK 1.7.0_15:
java version "1.7.0_15"
Java(TM) SE Runtime Environment (build 1.7.0_15-b03)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)