鍍金池/ 教程/ Java/ Java泛型類
Java參數(shù)傳遞
Java靜態(tài)內(nèi)部類
Java final關(guān)鍵字
http://www.yiibai.com/java_object_oriented_design/java_inheritan
Java泛型類
Java標(biāo)準(zhǔn)注解
Java接口教程
Java注解
Java枚舉類型
http://www.yiibai.com/java_object_oriented_design/java_class_ins
Java接口實(shí)現(xiàn)
Java哈希編碼
Java泛型約束
http://www.yiibai.com/java_object_oriented_design/java_import.ht
Java注解默認(rèn)值
Java異常拋出
Java不可變對象
Java類基礎(chǔ)
Java接口繼承
Java類方法
Java訪問級別
Java對象克隆
Java初始化塊
Java可變長度參數(shù)
Java接口字段
Java對象相等比較(Equals)
Java實(shí)例和靜態(tài)方法
Java繼承方法隱藏(覆蓋)
Java面向?qū)ο笤O(shè)計
Java對象finalize()方法
Java抽象類和方法
Java Object類
Java泛型方法和構(gòu)造函數(shù)
Java枚舉體
Java接口方法
Java this關(guān)鍵字
Java注解類型的限制
Java main()方法
Java Enum類
Java注解用法
Java枚舉比較
Java注解類型
Java內(nèi)部類成員
Java繼承和構(gòu)造函數(shù)
Java類實(shí)例化
Java內(nèi)部類類型
Java對象toString()方法
Java finally塊
Java繼承教程
Java自定義異常
Java枚舉值
Java接口作為類型
Java異常類
Java方法覆蓋教程
http://www.yiibai.com/java_object_oriented_design/java_class_bas
Java枚舉方法
Java方法重載
http://www.yiibai.com/java_object_oriented_design/java_interface
Java異常用法
Java內(nèi)部類
Java類成員訪問級別
Java異常處理教程
Java注解反射
Java構(gòu)造函數(shù)(構(gòu)造器)
Java導(dǎo)入(import語句的用法)

Java泛型類

使用泛型(也叫通用),可以在不知道代碼操作的對象的類型的情況下編寫代碼。 它允許創(chuàng)建通用類,構(gòu)造函數(shù)和方法。泛型類是使用形式類型參數(shù)定義的。
形式類型參數(shù)是一個逗號分隔的變量名列表,放在類聲明中類名后的尖括號<>中。

語法

下面的代碼聲明一個類Wrapper,它接受一個形式類型參數(shù):

public class Wrapper<T>  {

}

上代碼中,參數(shù)已命名為TT是一個類型變量,它可以是Java中的任何引用類型,例如:StringInteger,Double等。

當(dāng)使用Wrapper類時,要指定形式類型參數(shù)值。

實(shí)際參數(shù)

采用形式類型參數(shù)的類也稱為參數(shù)化類??梢月暶?code>Wrapper類的變量,將String類型指定為其形式類型參數(shù)的值,如下所示。

Wrapper<String> stringWrapper;

這里,String是實(shí)際的類型參數(shù)。
Java允許使用一個泛型類不指定形式類型參數(shù)。

用法

這是為了向后兼容。還可以聲明Wrapper <T>類的變量,如下所示:

Wrapper  aRawWrapper;

當(dāng)使用通用類而不指定實(shí)際的類型參數(shù)時,它被稱為原始類型。 上面的聲明使用Wrapper <T>類作為原始類型,因為它沒有指定T類型的值。

通用類的實(shí)際類型參數(shù)必須是引用類型。原始類型不允許作為通用類的實(shí)際類型參數(shù)。
類可以采用多個正式類型參數(shù)。 下面的代碼聲明一個Mapper類,它接受兩個形式參數(shù)TR

public class Mapper<T, R>    {

}

可以聲明Mapper <T,R>類的變量如下:

Mapper<String, Integer>  mapper;

這里,實(shí)際的類型參數(shù)是StringInteger。形式類型參數(shù)在類體中可用作類型。

public class Wrapper<T> {
  private T obj;

  public Wrapper(T obj) {
    this.obj = obj;
  }

  public T get() {
    return obj;
  }

  public void set(T obj) {
    this.obj = obj;
  }
}

Wrapper <T>類使用形式類型參數(shù)來聲明實(shí)例變量obj,以聲明其構(gòu)造函數(shù)和set()方法的形式參數(shù),以及作為get()方法的返回類型。

可以通過為構(gòu)造函數(shù)指定實(shí)際的類型參數(shù)來創(chuàng)建泛型類型的對象,如下所示:

Wrapper<String> w1  = new Wrapper<String>("Hello");

也可以省略實(shí)際的類型參數(shù)。 在下面的代碼中,省略指定String類型,編譯器會將構(gòu)造函數(shù)的實(shí)際類型參數(shù)推斷為String

Wrapper<String> w1  = new Wrapper<>("Hello");

當(dāng)聲明了泛型類的一個變量,可以把形式類型參數(shù)看作是指定的實(shí)際類型參數(shù)。現(xiàn)在,可以認(rèn)為,對于w1,Wrapper類的get()方法返回一個String。

String s1=  w1.get();

示例

以下代碼顯示如何使用Wrapper類。

public class Main {
  public static void main(String[] args) {
    Wrapper<String> w1 = new Wrapper<>("Hello");
    String s1 = w1.get();
    System.out.println("s1=" + s1);

    w1.set("Testing generics");
    String s2 = w1.get();
    System.out.println("s2=" + s2);

    w1.set(null);
    String s3 = w1.get();
    System.out.println("s3=" + s3);
  }
}

class Wrapper<T> {
  private T obj;

  public Wrapper(T obj) {
    this.obj = obj;
  }

  public T get() {
    return obj;
  }

  public void set(T obj) {
    this.obj = obj;
  }
}

執(zhí)行上面代碼,輸出結(jié)果如下 -

s1=Hello
s2=Testing generics
s3=null