黑马程序员技术交流社区
标题:
Iterator中next检索出来的元素强转的问题
[打印本页]
作者:
jsfjb
时间:
2012-12-13 09:50
标题:
Iterator中next检索出来的元素强转的问题
Iterator中next检索出来的元素强转的问题。
HashSet hs = new HashSet();
hs.add(new Person("aa1",11));
hs.add(new Person("aa2",22));
hs.add(new Person("aa3",33));
Iterator it = hs.iterator();
while(it.hasNext()){
Person p = (Person) it.next(); //这儿为什么非要强转。 我看的帮助文档中Iterator的next方法的返回值是: E 。不是Object。
System.out.println(p.getName()+"::"+p.getAge());
}
复制代码
作者:
郭光明
时间:
2012-12-13 11:38
这里肯定是要强转的 助文档中Iterator的next方法的返回值是: E E代表的是泛型 如果你定义下泛型就可以不需要强转了 如Iterator<Person> it = hs.iterator();
作者:
yingying
时间:
2012-12-13 11:51
E就是element 元素的意思,在泛型中就代表所有的类型,你可以把它看成是Object类型,老师说过的,所以那儿就必须得强转,明白了吧
作者:
洪灿阳
时间:
2012-12-13 13:07
E next()
返回迭代的下一个元素。
这是手册的解释,它的意思是返回它的一个元素。但是如果要获取元素的内容(值,名字等),就必须明确这是个什么元素,才能获取。所以必须强转或者先用泛型定义。
Person p = (Person) it.next(); 如果没有强转的话,在编译时,就通过不了,因为编译时,无法确定等式的右边一定是person类型。只有把它强转成person类型,左右两边才能对等。编译也就不会出错。大概就是这样了。
作者:
luobo
时间:
2012-12-17 16:51
猜想所以person类也继承了 elements那个类
作者:
filter
时间:
2012-12-17 17:00
Person p = (Person) it.next();
编译的时候等号左右两边不会赋值,编译器只会检查你两端的返回值能不能赋值,=能不能成立,当然要强制转换了
加了泛型会告诉编译器两边的数据类型一致,系统判断能够通过
不加泛型即使强制转换了编译器虽然能够通过编译,还会警告数据类型不一致
作者:
yuchen208
时间:
2012-12-18 19:10
E就是泛型
package Junit;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
public class Test5 {
@Test
public void cry() {
List<Person> list = new ArrayList<Person>();
list.add(new Person("张三", 1));
list.add(new Person("李四", 2));
list.add(new Person("王五", 3));
list.add(new Person("赵六", 4));
Iterator<Person> it = list.iterator();
while (it.hasNext()) {
Person p = it.next();
System.out.println("姓名:\t" + p.getUsername() + "\t" + "编号:\t"
+ p.getId());
}
}
}
复制代码
作者:
王斌
时间:
2012-12-19 10:31
其实可以这样理解的, hs.add(new Person("aa1",11));
HashSet 向这个容器中添加的类型可以是object 的就是任意类型。但是此时
添加的是new 的一个Person类型的参数,也就是说,现在容器中都是Person类型的了
Person p = (Person) it.next(); // 返回的是E就是说不是向容器添加什么都可以遍历出来的
所以既然向容器中添加了Person类型的那么遍历出来的也应该是Person类型的才对阿,其它的类型
是不能被遍历出来的,这个就是要遍历时候转换成Person了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2