为了账号安全,请及时绑定邮箱和手机立即绑定

声明一个类是否为泛型为什么会影响该类的其他泛型方法(与该类上的泛型参数不同)

声明一个类是否为泛型为什么会影响该类的其他泛型方法(与该类上的泛型参数不同)

人到中年有点甜 2018-11-13 20:44:35
JDK8,代码如下:public class Foo<E> {    public <T extends List> T get(T list) {        return null;     }    public void pass(Foo<?> foo) {         ArrayList arrayList = foo.get(new ArrayList());     }    public void broken(Foo foo) {        // 编译器报错 Incompatible types,无法转化为ArrayList         ArrayList arrayList = foo.get(new ArrayList());     } }Foo的泛型参数E和get方法的泛型参数T不同,按理来说是否声明Foo为泛型应该不影响get方法啊.这是JAVA作者由于某种原因有意为之,还是编译器的推断能力不足.
查看完整描述

1 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

这个是泛型的边界问题,java编译器不允许不安全的类型转换。

第一个方法参数定义了 Foo<?>,告诉了编译器,类的泛型允许接受任何类型,因此可以进行安全的类型转换(其实是接受OBJECT)

第二个方法没有指定Foo的泛型类型,因此这里会存在类型转换的不确定性。


查看完整回答
反对 回复 2018-11-13
  • 1 回答
  • 0 关注
  • 613 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号