1. 程式人生 > >2.泛型類和泛型方法

2.泛型類和泛型方法

1.定義簡單泛型類:

public class Pair<T> {
    private first;
    private second;

    public Pair() { first = null; second = null; }
    public Pair(T first, T second) { this.first = first; this.second = second; }

    public T getFirst() { return first; }
    public T getSecond() { return second; }

    public
void setFirst(T newValue) { first = newValue; } public void setSecond(T newValue) { second = newValue; } }
這是有多個型別變數的泛型類:
public class Pair<T,U> {...}
建立泛型類的物件
Pair a = new Pair<String>();

2.定義泛型方法

(T…a並不是省略的意思,而是可變長度引數列表,表示此處接受的引數為0到多個Object型別的物件,或者是一個Object[])

class ArrayAlg {
    public
static<T> T getMiddle(T...a) { return a[a.length/2]; } }
型別變數應該放在修飾符(public static)的後面,返回值型別T前面

此外,要想知道編譯器對一個泛型方法呼叫最終推斷出哪種型別,可以有目的的引入一個錯誤,如:

public class Generic_3_Function {
    public static void main(String[] args) {
        JButton btn = ArrayAlg.getMiddle("Hello" ,0,null);
    }
}

這裡寫圖片描述
會得到以上錯誤,意思是getMiddle在通過String,int,null所推斷出來的共同父類是Object、Serializable和Comparable,可以將結果賦給他們

注:本文為《Java 核心技術 卷I》讀書筆記及個人理解解釋