黑马程序员技术交流社区

标题: 关于泛型的疑问 [打印本页]

作者: TK13761    时间: 2013-3-22 21:05
标题: 关于泛型的疑问
本帖最后由 谭仁龙 于 2013-3-23 09:43 编辑
  1. public static void printCollection(Collection<Object> cols) {
  2.                 for(Object obj:cols) {
  3.                         System.out.println(obj);
  4.                 }
  5.                 /* cols.add("string");//没错
  6.                  cols = new HashSet<Date>();//会报告错误! --------------->这里为什么会报告错误? 今天复习泛型的时候遇到的疑问 希望大 能详细解释下 谢谢*/
  7. }
复制代码

作者: 刘凯    时间: 2013-3-22 21:12
这个cols.add("string");这一句 是因为"string"是一个字符串类型,字符串类型是Object的子类  因为用了多态  所以没有问题

而这句cols = new HashSet<Date>();  
相当于Collection<Object> cols = new HashSet<Date>();    这个据要用到了泛型的知识点 这个后边的基础加强会有讲
Collection<Object> cols = new HashSet<Date>();    这样的定义是不行的  同样Collection<Date> cols = new HashSet<Object>();  也不能通过
但是Collection<Object> cols = new HashSet();这样可以通过
作者: 王_强    时间: 2013-3-23 09:21
楼主,你好
  泛型是为了检查编译时装入的数据的正确性。
   public static void printCollection(Collection<Object> cols) {    //这里你定义了集合cols中装入的是Object类型的数据
                for(Object obj:cols) {
                        System.out.println(obj);
                }
                /* cols.add("string");//     所以,这里根据多态,是正确的
                 cols = new HashSet<Date>();//但是,这里,你又把cols定义为装入Data类型的数据,重复定义了,所以报错!
}

作者: TK13761    时间: 2013-3-23 09:35
王_强 发表于 2013-3-23 09:21
楼主,你好
  泛型是为了检查编译时装入的数据的正确性。
   public static void printCollection(Collecti ...

谢谢~~~~~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2