泛型的主要用途,就是用来指定集合要持有什么类型的对象,并由编译器来保证类型的正确性。它实现了参数化类型,使集合可以存储属于同一类型的元素。
通过一个例子来解释:
public class Test<T> { private T t; public Test<(T t) { this.t = t; } public T getT() { return t; } public void setT(T t) { this.t = t; }}
不使用泛型:
public class Demo1 { public static void main(String args[]) { Test str = new Test("Hello Java!"); Test dou = new Test(new Double("10")); Test obj = new Test(new Object()); System.out.println("str: "+(String)str.getT()); System.out.println("dou: "+(Double)dou.getT()); System.out.println("obj: "+(Object)obj.getT()); }}
因为java的泛型是处在编译层的,JVM在对待泛型数据的时候,把它们看成是Object类型。
在使用这些元素时,JVM会自动进行类型转换。
使用泛型:public class Demo2 { public static void main(String args[]){ Test<String> str =new Test<String>("Hello world!"); Test<Double> dou =new Test<Double>(new Double("25")); Test<Object> obj =new Test<Object>(new Object()); System.out.println("str: "+str.getT()); System.out.println("dou: "+dou.getT()); System.out.println("obj: "+obj.getT()); }}
class Test<T> 声明了一个泛型类,这个T没有任何限制,实际上相当于 class Test<T extends Object>
经比较可知:
集合使用泛型后,元素类型得以明确,避免了手动类型转换的过程,提高了效率。