黑马程序员技术交流社区
标题:
关于Iterator<>加泛型的问题
[打印本页]
作者:
wahaha
时间:
2013-3-10 01:05
标题:
关于Iterator<>加泛型的问题
在java基础视屏 集合框架 HashMap一章里用到泛型,
对集合加泛型,可以理解,是为了将问题反馈在编译阶段,是程序更趋向于合理
但是对迭代器加泛型,就不太理解,因为在编译阶段,还没进行运算,迭代器也不知道它自己要迭代的对象是神马,
加泛型(如:Iterator<Student>)意义何在呢?
作者:
谢洋
时间:
2013-3-10 01:26
本帖最后由 谢洋 于 2013-3-10 01:28 编辑
Iterator<Student>)意义何在呢? 在此我认避免了强转的麻烦
如不用<Student>代码就行这样写
while(it.hasNext){
Student s =
(Student).
next();//用泛型时这个不用加(Student)
}
作者:
amen0205
时间:
2013-3-10 05:03
1 迭代器是用来 遍历集合的 当集合的泛型确定时 那迭代器的泛型也就确定了 因为 Iterator it=al.iterator();
2 如果迭代器不指定泛型呢? 那就默认Object 那就需要转型 所以用了泛型就可以不用转型了 简化操作
3 那如果设计迭代器时就不设计泛型好不好呢? 那你说 it.next(); 返回的该是什么类型呢?
这大概就是迭代器 需要泛型的原因了吧
作者:
scott0610
时间:
2013-3-10 08:42
加泛型的意义在于,遍历集合的时候,不需要类型强制转换。
在定义集合使用泛型,当你向集合中添加数据时,系统会先对集合的数据进行检测,验证,如果不符合集合定义时的类型,则编译出错。
这样可以提供运行效率,根据这个道理,当你遍历集合是,就不需要对类型进行判断和强制类型转换。
作者:
聂斌
时间:
2013-3-11 00:08
本帖最后由 聂斌 于 2013-3-11 00:10 编辑
泛型的好处:
1.将运行时期出现的问题ClassCastException,转移到了编译时期。,
方便于程序员解决问题。让运行时问题减少,安全。,
2,避免了强制转换麻烦。
代码:
ArrayList<String> al = new ArrayList<String>();
al.add("abc01");
al.add("abc0991");
al.add("abc014");
Iterator it = al.iterator(); //Iterator这里没有指定
迭代时产生的元素的类型,,那么
迭代时产生的元素的类型
默认就是object,,,,所以
it.next();返回的元素的类型就是 object
while(it.hasNext())
{
String s =
it.next();
//此时发现
it.next()
报错,,,,,这里需要强制类型转换String s = (String)it.next();,,
System.out.println(s+":"+s.length());
}
或者可以这样修改:
Iterator<String> it = al.iterator();
while(it.hasNext())
{
String s = it.next(); //这里不用强制转换了
System.out.println(s+":"+s.length());
}
解析代码:Iterator<String>
表示迭代时产生的元素的类型是
String类型的,,,所以it.next();返回类的元素就是string类型的就避免了类型转换,,,
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2