首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java泛型误解

Java泛型误解
EN

Stack Overflow用户
提问于 2015-06-07 03:47:15
回答 1查看 78关注 0票数 3

如果为T extends Class,为什么泛型T不能用作class的返回类型。

示例:

代码语言:javascript
复制
public class Foo<T extends Bar> {
    Bar[] array = new Bar[200];

    Optional<T> forIndex(int index) {
        return Optional.ofNullable(array[index]);
    }
}

扩展Bar需要T,这意味着T永远不会有类型转换问题,或者我搞错了?有没有人能详细说明。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-07 03:52:19

你搞错了。每个T都是Bar,但并非每个Bar都是TTBar更专业(每只腊肠都是一只狗,但并不是每只狗都是腊肠)。这意味着,return Optional.ofNullable(array[index]);尝试匹配T上的Bar,这是不可能的。

您所能做的就是仅使方法泛型:

代码语言:javascript
复制
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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30686891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档