天天看點

java 泛型方法、類

1、List<?>

       List<?> 這樣去定義的話和List<Object>是一個意思,這樣就可以避免到時候從list中取值使用的時候出現運作時異常,加上泛型定義之後,在往list中添加元素的時候就必須是定義的元素,否則編譯會報錯,例如定義List<String>a=new ArrayList<String>();這樣的話,a中就隻能添加字元串,其它類型添加不了,特别作用就是避免運作時異常。

?是泛型的通配符,代表不确定,表示沒有或隻有一個.

2、泛型類:

public class Gen<T> {

   private T t;

   public Gen(T t) {

       this.t = t;

    }

   public T getT() {

       return t;

    }

   public void setT(T t) {

       this.t = t;

}

Public voidfun(T t,String name){

         …

         if (t instanceof String[]) {//數組

    } else if (t instanceof Map) {//Map

}

}

}

我們可以看到T是一個不确定的類。我們在聲明、執行個體化Gen的時候,可以使用:

Gen<String>gen1=new Gen<String>("");

Gen<Integer>gen2=newGen<Integer>(1);

注:泛型類中,泛型的類型可以有多個(使用“,”隔開);泛型的參數也可以使用extends語句(稱作有界類型);

注:泛型類,是在執行個體化類的時候指明泛型的具體類型;泛型方法,是在調用方法的時候指明泛型的具體類型。

3、泛型方法:

public class GenMethod {
    public static <T> void display(T t) {
        System.out.println(t.getClass());
    }
}      

或者

java 泛型方法、類
java 泛型方法、類

       說明一下,定義泛型方法時,必須在傳回值前邊加一個<T>,來聲明這是一個泛型方法,持有一個泛型T,然後才可以用泛型T作為方法的傳回值。

       Class<T>的作用就是指明泛型的具體類型,而Class<T>類型的變量c,可以用來建立泛型類的對象。

       為什麼要用變量c來建立對象呢?既然是泛型方法,就代表着我們不知道具體的類型是什麼,也不知道構造方法如何,是以沒有辦法去new一個對象,但可以利用變量c的newInstance方法去建立對象,也就是利用反射建立對象。

繼續閱讀