黑马程序员技术交流社区

标题: 关于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