黑马程序员技术交流社区

标题: 泛型中问题求解 [打印本页]

作者: 一叶障目    时间: 2014-11-14 22:15
标题: 泛型中问题求解
  1. import java.util.*;
  2. public class Demo
  3. {
  4.         public static void main(String[] args){
  5.                 List list=new ArrayList();
  6.                 list.add("aabc");
  7.                 list.add("ab");
  8.                 list.add(4);
  9.                 Iterator it=list.iterator();
  10.                 while(it.hasNext()){
  11.                         String s=(String)it.next();
  12.                         System.out.println(s);
  13.                 }
  14.         }
  15.        
  16. }<span style="line-height: 2.2em;">为什么程序编译的时候不会出现问题,编译会出现类型转换问题,jvm不能检测我存储的是String类型,然后判断我的强制转换是否合法吗?</span>
复制代码

作者: 一叶障目    时间: 2014-11-14 22:21
int[] a=new int[6];
a[0]=9.0;
编译会出错,因为我定义数组里面存储的是int型,所以存入小数编译会出错;
那为什么我在集合里存储的是String类型,然后我做强制转换的时候,编译器不能检测出问题?
作者: striker    时间: 2014-11-14 22:32
正是因为这个原因,才有了泛型
作者: 一叶障目    时间: 2014-11-14 23:16
striker 发表于 2014-11-14 22:32
正是因为这个原因,才有了泛型

因为检测不出原因才有的。。。。。。。:dizzy:
作者: zhangyangLengen    时间: 2014-11-15 09:46
因为集合中默认的泛型是Object类型,而你插入的整数,会将自动装箱成为Integer类型
作者: 一叶障目    时间: 2014-11-15 10:04
zhangyangLengen 发表于 2014-11-15 09:46
因为集合中默认的泛型是Object类型,而你插入的整数,会将自动装箱成为Integer类型 ...

:L我问的不是这个意思
作者: 327753899    时间: 2014-11-15 10:10
你的强转合法
作者: 一叶障目    时间: 2014-11-15 10:41
我感觉应该是编译器无法检测 =左边的类型和右边具体指向的引用数据类型是否一致吧,就是说编译器检测时无法自动向下转型吧,,,帮看看我新发的帖子《泛型问题总结——求高手指导》:handshake
作者: zhangyangLengen    时间: 2014-11-15 15:21
可能因为:强转合法(编译时期只是检测语法错误),但是在运行的时期(可能出现运行错误);编译时期是检测不到该运行时期出现的错误的;
Exception异常分为:编译时异常和运行时异常
作者: cs8630323    时间: 2014-11-15 16:30
编译器并不知道对象的实际类型,只知道现在的类型,编译器允许Object向下转型

Integer f[]=new Integer[2];
Object f1=new Integer(2);
f[1]=f1;//ERROR
数组看到f1是Object型就没让它进,尽管它实际是Integer型

我想编译器应该可以判断基本数据类型

说的不一定对,就参考下吧
作者: 一叶障目    时间: 2014-11-15 20:42
zhangyangLengen 发表于 2014-11-15 15:21
可能因为:强转合法(编译时期只是检测语法错误),但是在运行的时期(可能出现运行错误);编译时期是检测 ...

恩,谢谢解答:lol
作者: 一叶障目    时间: 2014-11-15 20:43
cs8630323 发表于 2014-11-15 16:30
编译器并不知道对象的实际类型,只知道现在的类型,编译器允许Object向下转型

Integer f[]=new Integer[2] ...

OK啦,:D




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