008 The Generics In JAVA

泛型是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 }
原文地址:https://www.cnblogs.com/tantanjishu/p/4914883.html