为什么T
不能将泛型用作class
if的返回类型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
永远都不会出现转换问题,还是我误会了?有人可以详细说明。
您绕错了路。每个T
都是一个Bar
,但不是每个Bar
都是一个T
。T
比Bar
(每只腊肠狗是只狗,但不是每只狗都是只腊肠狗)更为专业。这意味着,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教程以及PECS(生产者extends
-消费者super
)助记符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句