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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙峰 黑马帝   /  2012-6-6 17:49  /  1358 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙峰 于 2012-6-6 22:17 编辑

  1. <P>
  2. ArrayList al=new ArrayList();
  3. al.add(new Person("lisi",30));
  4. :
  5. :
  6. Itreator it=al.iterator;
  7. while(it.hasNext())

  8. {
  9. Object obj=it.next();
  10. Person p=(Person)obj;
  11. sop(p.getName());   //这里为什么不能写成:sop(it.next().getName()),非得加上前面两句?老毕说的是要求类型转换,因为建立迭代器时,不知道里面对象的类型。
  12.                                  //但是,在al.add(new Person("lisi",30));时,不是已经知道al里放的是Person()类型数据了吗?

  13. }






  14. //那么对于这段代码:为什么有可以了呢? 希望能通俗的讲解下?
  15. public static void method_1()
  16. {
  17.          ArrayList al=new ArrayList();
  18.          al.add("java01");
  19.         al.add("java02");
  20.         al.add("java03");</P>
  21. <P>  </P>
  22. <P>   </P>
  23. <P>   Iterator it=al.iterator();
  24.    while(it.hasNext())
  25.     sop(it.next());
  26. }





  27. </P>
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

3 个回复

倒序浏览
Object obj=it.next();
Person p=(Person)obj;
sop(p.getName());
//我的理解,你这里存的是一个具体的对象,里面包含的内容可能不止一个name 成员变量,你要通过it.next().getName() 是不能都取到的,

Iterator it=al.iterator();
while(it.hasNext())
  sop(it.next());
//  而这个,直接存了一个字符串对象,只是做演示用的,所以就直接输出了,在实际的开发中是不常用的。

回复 使用道具 举报
第一个it.next()是个返回的是个Object对象,你要是写成it.next().getName()的话,就相当于调用Object对象的getName方法,Object对象是没有这个方法的,所以要类型转换下。
第二段中集合存的是个String字符串对象,当sop(it.next())时调用的Object的toString方法,是可以这么做的。不过我觉得最好别这样,毕老师上课的时候要打的代码很多就简写了吧。
其实把集合加上泛型之后就可以很好的避免这个问题了{:soso_e113:}

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
1.
Object obj=it.next();
Person p=(Person)obj;
sop(p.getName());  
//这里为什么不能写成:sop(it.next().getName()),非得加上前面两句?老毕说的是要求类型转换,因为建立迭代器时,不知道里面对象的类型.
但是,在al.add(new Person("lisi",30));时,不是已经知道al里放的是Person()类型数据了吗?
首先楼主应该明白迭代器的含义,当创建一个迭代器时,
你可以把它当成一个容器,里面是什么都没有的,
实则是跟ArrayList是两回事,所以迭代器是不知道里面是什么类型的对象的.
所以你要把什么放进去就要注明是什么类型的对象,如果直接调用sop(it.next().getName()).就是没标明是Person类型的对象,所以是不对的.
2.
//那么对于这段代码:为什么有可以了呢? 希望能通俗的讲解下?
至于第二个 你所传入的是字符串类型,Object类中本来就有一个方法是输出时自动调用的toString(),所以可以不写.

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
孙峰 + 10
袁錦泰 + 1

查看全部评分

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