Java泛型理解错误
如果Java泛型理解错误,java,generics,Java,Generics,如果T扩展了类,为什么泛型T不能用作类的返回类型 例如: public class Foo<T extends Bar> { Bar[] array = new Bar[200]; Optional<T> forIndex(int index) { return Optional.ofNullable(array[index]); } } 公共类Foo{ 条形图[]数组=新条形图[200]; 可选forIndex(整数索引){
T扩展了类
,为什么泛型T
不能用作类
的返回类型
例如:
public class Foo<T extends Bar> {
Bar[] array = new Bar[200];
Optional<T> forIndex(int index) {
return Optional.ofNullable(array[index]);
}
}
公共类Foo{
条形图[]数组=新条形图[200];
可选forIndex(整数索引){
返回可选的.ofNullable(数组[索引]);
}
}
T
需要扩展Bar
,这意味着T
不应该有铸造问题,还是我弄错了?有人能详细说明一下吗。你搞错了。每个T
都是条
,但不是每个条
都是T
T
比Bar
更专业(每只猎犬都是一只狗,但不是每只狗都是一只猎犬)。这意味着,返回可选的.ofNullable(数组[index])
尝试匹配T
上的条
,这是不可能的
您可以做的是仅使方法通用:
public class Main {
Bar[] array = new Bar[200];
Optional<? super Bar> forIndex(int index) {
return Optional.ofNullable(array[index]);
}
}
公共类主{
条形图[]数组=新条形图[200];
OptionalJava泛型的擦除特性确保了数组和泛型不能很好地混合:数组是协变的,保留的,泛型是不变的把它擦掉。