黑马程序员技术交流社区
标题:
用迭代器的Next()方法调用自定义对象特有方法时出错的原因
[打印本页]
作者:
为梦而战
时间:
2011-12-20 00:50
标题:
用迭代器的Next()方法调用自定义对象特有方法时出错的原因
本帖最后由 为梦而战 于 2011-12-20 00:59 编辑
当我们使用ArrayList的add();方法将自定义对象加入ArrayList时,应该注意到add(Object obj);方法中参数是Object类型的,所以这时自定义对象就会被上升,转换成Object类型,而当我们定义了迭代器,用迭代器的Next()调用自定义对象的特有方法时,因为此时用Next();方法取出来的对象是Object类型的,Object类中没有自定义对象的特有方法可被调用,所以就出错了。我们应该在使用Next();方法之前先将用Next()取出来的对象降级转换成自定义类,然后再用自定义对象去调用它自己特有的方法、其实这也是多态在此处的体现。
示例:
public static void main(String[] args)
{
ArrayList a1=new ArrayList();
a1.add(new Person("zhangsan",25)); // 使用ArrayList的方法add();将自定义对象存入ArrayList。
Iterator it=a1.iterator();
while(it.hasNext())
{
sop(it.Next().getName()); //我们可能会像输出方法中这样调用Person对象中的特有方法getName(),会错。
Person p=(Person)it.next(); //这一步才是正确的和必须的
sop(p.getName()); //这样调用才是正确的
}
}
作者:
刘基军
时间:
2011-12-20 09:20
使用集合时,应该加上泛型,这样就不会发生那样的问题。
ArrayList<Person> a = new ArrayList<Person>();
import java.util.*;
class Person
{
String name;
int age;
Person(String s,int i)
{
this.name=s;
this.age=i;
}
String getName()
{
return name;
}
}
class Test
{
public static void main(String[] args)
{
ArrayList<Person> a = new ArrayList<Person>();
a.add(new Person("zhangsan",25));
Iterator<Person> it=a.iterator();
while(it.hasNext())
{
sop(it.next().getName());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
作者:
张冬冬
时间:
2011-12-20 09:27
嗯、是要加上泛型的,这样就不用强转了,这个1.5的新特性
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2