网上说的太具体 反而复杂难以理解,,,请高手帮忙下。

解决方案 »

  1.   

    我先以我的理解来回答你,然后陪你一起等更正确全面的答案.   要理解泛型,就必须了解它的前身--集合类(如:ArrayList,Hashtable,SortedList等集合).集合类是可以代替数组以便灵活管理对象组.注意这里的用词,集合类是个数组(样的东西),集合类用来存储对象,什么是对象,Object.
       集合类的好处是包容性强,万物皆对象,所以他能存任何东西.然而有利就有弊,在产生便利性的同时,它也带来了处理性能损失和错误风险提高的坏处.假如对某一集合,我们存储的都是int类型的数字,由于集合类存储的是对象,所以存入时会进行装箱,将int装为object,在提取时,又会再拆箱,装箱拆箱动作不可避免带来的额外的性能开支.此外,由于集合不加分辨,可以存储任何对象,那么如果我们把int,string或其他对象混装在同一集合中,在拆箱时,也许会由于拆箱不当带来错误,例如,我们想把一个字符串"AAAAA"拆为一个int数值,自然是不被允许的.
       为避免这些弊端,在Net2.0中引入了泛型.泛型其实可以理解为一个强类型的集合类.在ADO.net中,也有类似的改进,那就是强类型Dataset的引入.毋庸置疑,泛型还是个集合,不过它是个确定了存储对象类型的集合,这样,就绕过了装箱拆箱动作,也不会产生拆箱错误.可以这样认为,集合类是泛型的基类部分,泛型新引入的部分是对集合基类的多态扩展.
      

  2.   

    提前定义容器(set,list,map)里的元素的类型;
    在1.4的时候:
          list.set(index,element)你放进list里的如果是String类型,那么
          list.get(index);得到的是依然是Object类型,必须通过强制类型转换
          (String)list.get(index)才能得到String类型,这太不合理了
    到了1.5的时候:
          如果你定义List<String> list = new ArrayList<String>();
         那么在list.set(index,element)你想放进非<String>类型的元素,在编译的时候就会报错;
         但是换来的好处是list.get(index)不用强制类型转换也能得到本来的元素类型的值。