A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蔡汉康 中级黑马   /  2012-10-21 11:32  /  1290 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 蔡汉康 于 2012-10-21 15:48 编辑

今天看视频ArrayList练习2有个地方看不懂,请教一下.
前面创建了一个
class Person
{
........
}
ArrayList al=new ArrayList();
al.add(new Person("lisi001",30));
al.add(new Person("lisi002",32));
al.add(new Person("lisi003",33));
al.add(new Person("lisi004",31));
Iterator it=al.iterator();
while(it.hasNext())
{
  Object obj=it.next();
  Person p=(Person)obj;请问这里为什么需要强转,Person和Object是什么关系
  sop("");
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

5 个回复

倒序浏览
Person  p =            创建的是Person对象,obj是Object类型,所以要强转

Object是所有类的父类,当然也是Person的父类.

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
这段代码里,迭代器接受的是Object对象。所以你需要将这里的对象强转成Person对象。   
以后你接触到泛型,在指定时指定泛型类型,就不必再强转了。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
1.ArrayList是一个集合容器,可以装任何同一类型的对象,没有使用泛型之前,为了满足可以装任何对象,定义add方法时传入的参数是object;同样得到的迭代器 Iterator it=al.iterator();  返回迭代的下一元素方法(next()),返回类型也是object,但该示例中装入的是Person类,迭代出的虽是Person类,但编译器并不知,只能先用Object接受再转型,否则会出错。
2.java5.0版本之后引入了泛型,它在编译时进行类型安全检查,并且在运行时所有的转换都是强制的隐式的,大大提高了代码的安全。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
在你添加元素的时候,它会默认的把你添加的元素向上转型为Object的引用,因为Object是所有类的父类

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
范型是给编译器看的,所以迭代的时候返回的是Object类型,需要把它转换成你之前存到集合里的类型

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马