Rol*_*all 9 java generics inference wildcard
从这个 Oracle Java教程:
WildcardError示例在编译时产生捕获错误:
public class WildcardError {
void foo(List<?> i) {
i.set(0, i.get(0));
}
}
Run Code Online (Sandbox Code Playgroud)
在此错误演示之后,他们使用辅助方法解决了问题:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
首先,他们说列表输入参数(i)被视为Object:
在此示例中,编译器将
i输入参数处理为Object类型.
为什么然后i.get(0)不返回Object?如果已经这样传递了?
此外,使用a <?>时你必须使用辅助方法是什么意思<T>.不能直接使用T可以推断出来的吗?
小智 4
List<?>确实意味着未知类型的对象列表,它与List<Object>.
因为我们不知道列表结果中的元素类型i.get(0)被Java视为Object,并且不能添加Object到List<?>。如果您的 Java 可以更智能,但在带有<?>通配符的更复杂的代码中,很容易使其成为非类型安全的。
| 归档时间: |
|
| 查看次数: |
882 次 |
| 最近记录: |