为什么通用T
如果class
不能用作T extends Class
的返回类型。
示例:
public class Foo<T extends Bar> {
Bar[] array = new Bar[200];
Optional<T> forIndex(int index) {
return Optional.ofNullable(array[index]);
}
}
T
需要延长Bar
这意味着T
应该永远不会出现投射问题,或者我是否误解了这个问题?有人可以详细说明。
答案 0 :(得分:5)
你得到了错误的方法。每个T
都是Bar
,但不是每个Bar
都是T
。 T
比Bar
更专业(每个dachshound都是狗,但不是每条狗都是dachshound)。这意味着,return Optional.ofNullable(array[index]);
尝试匹配Bar
上的T
,这是不可能的。
您可以做的只是使方法通用:
public class Main {
Bar[] array = new Bar[200];
Optional<? super Bar> forIndex(int index) {
return Optional.ofNullable(array[index]);
}
}
您可能希望查看Oracle's tutorial on Wildcards以及PECS (Producer extends
- Consumer super
) mnemonic