黑马程序员技术交流社区

标题: 类型转换 [打印本页]

作者: 杨千里    时间: 2012-9-11 03:39
标题: 类型转换
本帖最后由 杨千里 于 2012-9-14 19:41 编辑


String 类属于Object,但是下面的代码却编译失败?
List<String> Is = new ArrayList<String>();
List<Object>Io = Is;




作者: 郑世光    时间: 2012-9-11 07:38
本帖最后由 郑世光 于 2012-9-11 07:50 编辑

泛型是一种安全机制,是为了确定参数的类型。不能这样做的原因是泛型的  不能协变  特性。
你在第一句话List<String> Is = new ArrayList<String>();中指明 Is 中存放的是String类型,但在第二句中却将Is 中
放的是Object类型。泛型中具体的类需要保持一致。如果想让 List<Object>Io = Is; 编译通过,就需要用泛型的限定,
可修改为 List<? super String>Io = Is;   



作者: 朱烈葵    时间: 2012-9-11 08:32
想了想 还是楼上说的对
作者: 吴通    时间: 2012-9-11 08:54
楼主:
加泛型就是为了限制参数类型,如果楼主想要
String的父类也能编译成功可以这样写
List<? super String> Is = new ArrayList<? super String>();
这样限定之后就说明可以接收String和string的父类
作者: 舒远    时间: 2012-9-11 09:18
大家做了测试了么?即使按照2楼说的那样修改List<? super String> lo =  ls;
但依旧没法将Object类型的对象添加到lo中,编译还是没法通过。
作者: AngieFans85    时间: 2012-9-11 10:04
吴通 发表于 2012-9-11 08:54
楼主:
加泛型就是为了限制参数类型,如果楼主想要
String的父类也能编译成功可以这样写

List<? super String> Is = new ArrayList<? super String>();
这样写显然是不正确的,new ArrayList<? super String>();实例化时,类型参数必须给一个具体的类型.例如:
List<? super String> Is = new ArrayList<String>();




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2