Java泛型误解

业余爱好者

为什么T不能将泛型用作classif的返回类型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永远都不会出现转换问题,还是我误会了?有人可以详细说明。

图灵85

您绕错了路。每个T都是一个Bar,但不是每个Bar都是一个TTBar(每只腊肠狗是只狗,但不是每只狗都是只腊肠狗)更为专业这意味着,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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java中泛型的泛型?

来自分类Dev

Java嵌套泛型

来自分类Dev

Java泛型的区别

来自分类Dev

Java泛型与工厂

来自分类Dev

泛型问题Java

来自分类Dev

Java:泛型继承

来自分类Dev

Java使用泛型

来自分类Dev

Java泛型理解

来自分类Dev

Java泛型扩展

来自分类Dev

Java泛型

来自分类Dev

Java泛型语法

来自分类Dev

Java泛型转换

来自分类Dev

Java的泛型比较

来自分类Dev

Java的泛型流

来自分类Dev

Java的泛型问题

来自分类Dev

Java泛型的区别

来自分类Dev

Java与泛型混淆

来自分类Dev

Java泛型与工厂

来自分类Dev

Java泛型扩展

来自分类Dev

泛型问题Java

来自分类Dev

Java泛型.class

来自分类Dev

Java重载泛型

来自分类Dev

与泛型,Java的混淆

来自分类Dev

Java枚举泛型

来自分类Dev

Java泛型方法

来自分类Dev

Java泛型

来自分类Dev

Java泛型扩展

来自分类Dev

Java泛型参数

来自分类Dev

参数中的Java泛型