黑马程序员技术交流社区
标题:
迭代器中的小疑问【已解决】
[打印本页]
作者:
孙峰
时间:
2012-6-6 17:49
标题:
迭代器中的小疑问【已解决】
本帖最后由 孙峰 于 2012-6-6 22:17 编辑
<P>
ArrayList al=new ArrayList();
al.add(new Person("lisi",30));
:
:
Itreator it=al.iterator;
while(it.hasNext())
{
Object obj=it.next();
Person p=(Person)obj;
sop(p.getName()); //这里为什么不能写成:sop(it.next().getName()),非得加上前面两句?老毕说的是要求类型转换,因为建立迭代器时,不知道里面对象的类型。
//但是,在al.add(new Person("lisi",30));时,不是已经知道al里放的是Person()类型数据了吗?
}
//那么对于这段代码:为什么有可以了呢? 希望能通俗的讲解下?
public static void method_1()
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");</P>
<P> </P>
<P> </P>
<P> Iterator it=al.iterator();
while(it.hasNext())
sop(it.next());
}
</P>
复制代码
作者:
马林贺
时间:
2012-6-6 17:58
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());
// 而这个,直接存了一个字符串对象,只是做演示用的,所以就直接输出了,在实际的开发中是不常用的。
作者:
罗文杰
时间:
2012-6-6 18:06
第一个it.next()是个返回的是个Object对象,你要是写成it.next().getName()的话,就相当于调用Object对象的getName方法,Object对象是没有这个方法的,所以要类型转换下。
第二段中集合存的是个String字符串对象,当sop(it.next())时调用的Object的toString方法,是可以这么做的。不过我觉得最好别这样,毕老师上课的时候要打的代码很多就简写了吧。
其实把集合加上泛型之后就可以很好的避免这个问题了{:soso_e113:}
作者:
龙秋地
时间:
2012-6-6 18:27
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(),所以可以不写.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2