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

请教一个java泛型的问题

请教一个java泛型的问题

摇曳的蔷薇 2019-02-18 03:24:20
有如下代码:方法test参数是需要C类,但是因为B类继承C,所以我传B是OK的。 public class A { public static void main(String[] args){ B b = new B(); test(b); } private static void test(C c){ } } class B extends C{ } class C{ } 但是如下代码却不行,不理解? import java.util.ArrayList; import java.util.List; public class A { public static void main(String[] args){ List<B> b = new ArrayList<>(); test(b); } private static void test(List<C> c){ } } class B extends C{ } class C{ } 这时候会报错: test (java.util.List<com.test.Extends.C>) in A cannot be applied to (java.util.List<com.test.Extends.B>)   实在不理解,请大家指教。如果我就要传集合,有什么办法吗?
查看完整描述

5 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

参数修改为

 private static void test(List<? extends C> c){

 }

解决你的问题。

为什么直接类可以:

这是普通的继承关系,自然没问题

为什么集合不可以:

这是类型转换,是两码事。

查看完整回答
反对 回复 2019-03-01
?
茅侃侃

TA贡献1842条经验 获得超22个赞

基础的知识层主Java泛型,还是需要多看看书Java编程思想等,一句话:泛型是不具有继承性的,Java类的多态性不能强行安插到泛型上。

查看完整回答
反对 回复 2019-03-01
?
一只名叫tom的猫

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

你爸爸的财产你可以继承,你爸爸的公司的财产不能被你的公司继承,也就不存在多态性了。

查看完整回答
反对 回复 2019-03-01
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

继承和类型转换是两码事,应该这样声明:、
private static void test(List<? extends C> c) { }

查看完整回答
反对 回复 2019-03-01
  • 5 回答
  • 0 关注
  • 514 浏览

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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