泛型是JAVA的核心特型之一,我们先看一个例子:
没有使用泛型前,如下:
import java.util.ArrayList; import java.util.List; public class GenericsStu { public static void main(String[] args) { List list = new ArrayList(); String name = "gavin"; Integer age = 5; list.add(name); list.add(age); for (Object obj : list) { String str = (String) obj; // Exception in thread "main" // java.lang.ClassCastException: // java.lang.Integer cannot be cast to // java.lang.String } } }
使用泛型后如下:
import java.util.ArrayList; import java.util.List; public class GenericsStu { public static void main(String[] args) { List<String> list = new ArrayList<String>(); String name = "gavin"; Integer age = 5; list.add(name); list.add("hello"); list.add(age);//这个在编译时就提示类型不匹配,如果用的是eclipse,会及时显示错误,避免了运行时异常。 for (String str : list) { System.out.println(str); } } }
泛型也可以用于Class,例如:
使用泛型前,是这样的:
1 public class GenericsStu { 2 3 private Object t; 4 5 public Object get() { 6 return t; 7 } 8 9 public void set(Object t) { 10 this.t = t; 11 } 12 13 public static void main(String args[]){ 14 GenericsStu type = new GenericsStu(); 15 type.set(2); 16 String str = (String) type.get(); //Exception in thread "main" java.lang.ClassCastException: 17 //java.lang.Integer cannot be cast to java.lang.String 18 System.out.println(str); 19 } 20 }
使用泛型后,是这样的:
1 public class GenericsStu<T> { 2 3 private T t; 4 5 public T get(){ 6 return this.t; 7 } 8 9 public void set(T t){ 10 this.t=t; 11 } 12 13 public void print(){ 14 System.out.println(t); 15 } 16 17 public static void main(String args[]){ 18 GenericsStu<String> type = new GenericsStu<String>(); 19 type.set("gavin"); 20 type.print();//Output is:gavin 21 type.set(2); //编译就不通过,避免了运行时java.lang.ClassCastException 22 type.print(); 23 24 25 } 26 }