如果为T extends Class
,为什么泛型T
不能用作class
的返回类型。
示例:
public class Foo<T extends Bar> {
Bar[] array = new Bar[200];
Optional<T> forIndex(int index) {
return Optional.ofNullable(array[index]);
}
}
扩展Bar
需要T
,这意味着T
永远不会有类型转换问题,或者我搞错了?有没有人能详细说明。
发布于 2015-06-07 03:52:19
你搞错了。每个T
都是Bar
,但并非每个Bar
都是T
。T
比Bar
更专业(每只腊肠都是一只狗,但并不是每只狗都是腊肠)。这意味着,return Optional.ofNullable(array[index]);
尝试匹配T
上的Bar
,这是不可能的。
您所能做的就是仅使方法泛型:
public class Main {
Bar[] array = new Bar[200];
Optional<? super Bar> forIndex(int index) {
return Optional.ofNullable(array[index]);
}
}
您可能需要在查看PECS (Producer extends
- Consumer super
) mnemonic的同时查看Oracle's tutorial on Wildcards
https://stackoverflow.com/questions/30686891
复制相似问题