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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢洋 高级黑马   /  2013-2-25 15:33  /  1296 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package test1;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
//泛型应用
public class GenericTest {

public static void main(String[] args) {
  Date date = new Date();
  Collection<Integer> arr = new ArrayList<Integer>();
  Collection<Object> arr2 = new ArrayList<Object>();
  
  arr.add(3);
  arr.add(4);
  
  arr2.add(new Object());
  arr2.add(new Object());
  //printCode1(arr);
  printCode2(arr);
  
  printCode1(arr2);
  printCode2(arr2);
}
public static void printCode1(Collection<Object> cols){
     for(Object obj: cols){
           System.out.println(obj);
     }
       //cols.add(“string”);//没错
       //cols = new HashSet<Date>();//报错
       cols = new HashSet<Object>();//没错,这还可以理解
}
public static void printCode2(Collection<?> cols){
        for(Object obj: cols){
            System.out.println(obj);
        }
        //cols.add(“string”);//报错,因为它不知自己示来匹配就一定是String
        cols.size();//没错,此方法与类型参数没有关系。
        //下面为什么可以?是相当于Collection<?> cols =  new HashSet<Date>();?
        //为什么不是相当于上面传入来的实参:
        //Collection<Integer> arr = new HashSet<Date>();?或 Collection<Object> arr2 = new HashSet<Date>();?
        cols = new HashSet<Date>();
   }
}


3 个回复

倒序浏览
童鞋,你这么发帖,别人看了都会郁闷的,一堆代码会让看帖的人眼花缭乱的。我建议你还是把问题先说明一下,然后再写代码,并把主要的注释也写出来,就很容易让别人看的容易些了。
回复 使用道具 举报
拿出来看就明白了
  1. Collection<Object> c2 = new HashSet<Date>();//错误
  2.                 Collection c = new HashSet<Date>();//正确

  3.                 printCode1(arr);//报错
  4.                 Collection<Object> cols = new ArrayList<Integer>();//报错
  5.                
  6.                 printCode2(arr);
  7.                 Collection cols2 = new ArrayList<Object>();

  8.                 printCode1(arr2);
  9.                 Collection<Object> cols3 = new ArrayList<Object>();
  10.                 printCode2(arr2);
  11.                 Collection cols4 = new ArrayList<Object>();
复制代码
回复 使用道具 举报
黄玉昆 发表于 2013-2-25 15:47
童鞋,你这么发帖,别人看了都会郁闷的,一堆代码会让看帖的人眼花缭乱的。我建议你还是把问题先说明一下, ...

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