为什么泛型T不能用作classif 的返回类型T extends Class.
例:
public class Foo<T extends Bar> {
Bar[] array = new Bar[200];
Optional<T> forIndex(int index) {
return Optional.ofNullable(array[index]);
}
}
Run Code Online (Sandbox Code Playgroud)
T需要延长Bar哪个意味着T永远不会有铸造问题,或者我是否误解了这个?有人可以详细说明.
你得到了错误的方法.每个T都是一个Bar,但不是每个Bar都是一个T.T比较专业Bar(每个dachshound是一只狗,但不是每条狗都是dachshound).这意味着,return Optional.ofNullable(array[index]);尝试匹配Bara T,这是不可能的.
你可以做的只是使方法通用:
public class Main {
Bar[] array = new Bar[200];
Optional<? super Bar> forIndex(int index) {
return Optional.ofNullable(array[index]);
}
}
Run Code Online (Sandbox Code Playgroud)
您可能希望查看Oracle关于通配符的教程以及PECS(生产者extends- 消费者super)助记符
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |