从这个Oracle Java 教程:
WildcardError 示例在编译时会产生捕获错误:
public class WildcardError {
void foo(List<?> i) {
i.set(0, i.get(0));
}
}
在此错误演示之后,他们使用辅助方法解决了问题:
public class WildcardFixed {
void foo(List<?> i) {
fooHelper(i);
}
// Helper method created so that the wildcard can be captured
// through type inference.
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
}
首先,他们说列表输入参数 ( i
) 被视为Object
:
在此示例中,编译器将
i
输入参数处理为 Object 类型。
那么为什么i.get(0)
不返回一个Object
?如果它已经这样传递了?
此外,使用 a 的意义何在<?>
,那么您必须使用辅助方法使用<T>
. T
直接使用哪个可以推断会不会更好?