1. 程式人生 > >【JavaSE系列-基礎篇6】——泛型方法

【JavaSE系列-基礎篇6】——泛型方法

泛型方法是引入自己型別引數的方法。和宣告一個泛型型別是相似的,但是這個型別引數的範圍是在宣告的方法體內。靜態的和非靜態的泛型方法都是允許的,以及泛型類建構函式。

泛型方法的語法包括一個在菱形括號內的一個型別引數,並出現在方法返回型別之前。對於靜態方法來說,型別引數部分必須出現在方法返回型別之前。
下面的Unit類中包含一個泛型方法compare,比較兩個pair物件:

public class Util {
    public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
        return
p1.getKey().equals(p2.getKey()) && p1.getValue().equals(p2.getValue()); } } public class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; } public void setKey(K key) { this
.key = key; } public void setValue(V value) { this.value = value; } public K getKey() { return key; } public V getValue() { return value; } }

最終呼叫方法的語句為:

Pair<Integer, String> p1 = new Pair<>(1, "apple");
Pair<Integer, String> p2 = new Pair<>(2, "pear");
boolean same =
Util.<Integer, String>compare(p1, p2);

型別被明確的提供< Integer ,String >。一般來說,這個型別會被省略,編譯器會自動推斷它的型別,我們可以寫為:

Pair<Integer, String> p1 = new Pair<>(1, "apple");
Pair<Integer, String> p2 = new Pair<>(2, "pear");
boolean same = Util.compare(p1, p2);

這個特性叫做型別推斷,允許你向呼叫普通方法一樣呼叫泛型方法,而不用指定菱形括號間的型別。