A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 清心玉质 中级黑马   /  2013-7-24 00:06  /  1039 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面这段代码中,迭代器无论定义泛型与否输出的结构都是一样的,那么在迭代器里定义泛型的作用是什么呢?
import java.util.*;
class  GenericDemo2
{
public static void main(String[] args)
{
  TreeSet<String> ts = new TreeSet<String>();
  ts.add("a");
  ts.add("ab");
  ts.add("addf");
  ts.add("asghh");
  ts.add("aerety");
  Iterator it =ts.iterator();
  //Iterator<String> it =ts.iterator();
  while(it.hasNext())
  {
   System.out.println(it.next());
  }
}
}

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

6 个回复

正序浏览
既然要在迭代器里定义泛型,就是要使用泛型带来的好处。如果迭代器没有定义泛型,那么要根据变量的不同类型,来定义各种不同的对应的迭代器,但里面的逻辑完全一样,这会产生大量的类。定义成泛型后,可以使用一个迭代器模板,避免产生大量的类。我们看到不管集合中存放的是什么类型的数据,迭代器都能与之匹配,就是用到泛型的功能。
回复 使用道具 举报
学习学习!
回复 使用道具 举报
泛型是JDK1.5版本以后出现的新特性,主要是为了将运行时期出现的问题转移到了编译时期,好让程序员解决,提高了代码的安全性;避免了强制转换的麻烦。 Iterator<String> it =ts.iterator();迭代器主要是从集合中取出元素的。TreeSet<String> ts = new TreeSet<String>();因为你在这句话中已经指定了TreeSet中元素是String类型了,迭代器取出的当然也就是String类型了,所以加不加泛型都一样。但是强烈建议楼主加上泛型,以免引来不必要的麻烦。
还有:要是你不加泛型,编译器也会提醒你的,嘿嘿。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
不是每次存的都是字符串吧,如果不定义泛型的话有时候可能需要进行强转,强转嘛,麻烦也有可能出问题,所以使用泛型就不用强转了。还有即使你存的的字符串万一需要对字符串进行操作,如果不定义泛型就是Object的,那字符串的方法就不好用了。如果定义了就可以直接用了。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 手打给力!!!

查看全部评分

回复 使用道具 举报
确保添加的数据类型一致. 你这代码add的数据类型全是String而且没出现异常(指添加是出现错误数据类型错误) 当然添不添加结果都一样。
加上泛型当出现错误类型时,能将错误在编译时期就能体现出来。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
  Iterator it =ts.iterator();
   //Iterator<String> it =ts.iterator();
没写泛型会出现警告,如果泛型中放的是一个实体对象可能会出现异常;

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马