如果 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]);
}
}
T
需要扩展 Bar
这意味着 T
不应该有转换问题,或者我误会了?有人可以详细说明吗。
最佳答案
你理解错了。每个 T
都是一个 Bar
,但不是每个 Bar
都是一个 T
。 T
比 Bar
更专业(每只 dachshound 都是一只狗,但并非每只狗都是 dachshound)。这意味着,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]);
}
}
您可能想看看 Oracle's tutorial on Wildcards以及 PECS (Producer extends
- Consumer super
) mnemonic
关于Java泛型的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30686891/