public class MainTest {public static void main(String[] args){
List<Integer> a = (List<Integer>)func();
System.out.println(a);
}
public static List func(){
List<String> ret = new ArrayList<String>();
ret.add("hello");
return ret;
}
}最后竟然能输出[hello]为什么不会提示报错呢?是不是如上的类型转换只会检查最外层的类型List?
3 回答
慕森王
TA贡献1777条经验 获得超3个赞
public static void main(String[] args)
{
List a = func();
System.out.println(a);
}
public static List func()
{
List ret = new ArrayList();
ret.add("hello");
return ret;
}
用编译工具查看生成的.class文件,还原成这样的代码!
另外java的泛型是编译时检查而已。你可以尝试
System.out.println((Integer)a.get(0)); ClassCastException就会出现了。
System.out.println((String)a.get(0));编译器会报错,不允许的。
慕村9548890
TA贡献1884条经验 获得超4个赞
为啥要报错呢。问题在于你强转之后啥也没做就打印一下list。
如果有数据的读取或者添加操作就会出错了。。
然后打印么,就直接call list的 toString method了。
list的toString method 应该是没有泛型安全的。
添加回答
举报
0/150
提交
取消