java泛型——幾種使用方式

概要:介紹泛型的幾種使用方法。

簡單類和接口的定義

public class Pair<T> {
	private T first;

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

	public T getFirst() {
		return first;
	}
}


public interface ICache<K, V> {

	public V put(K key, V value);

	public V get(K key);

}
ps:類型變量使用大寫形式,比較短。在java庫中,變量E表示集合的元素,K和V分別表示表的關鍵字與值的類型。T表示“任意類型”。


泛型方法:

public class Test {
	public static <T> T getObj(T a) {
		return a;
	}

	public static void main(String args[]) {
		String str = getObj("a");

		Student student = getObj(new Student());
	}
}

class Student {

}
    實際代碼從肯定不會出現例子中的這種情況,不過這體現了泛型方法一種顯而易見的優勢:T可以是“任意類型”。


類型變量的繼承:

public class ArrayTest {
	public static <T extends Comparable> T min(T[] a) {
		if (a == null || a.length == 0)
			return null;

		T smallest = a[0];
		for (int i = 1; i < a.length; i++) {
			if (smallest.compareTo(a[i]) > 0) {
				smallest = a[i];
			}
		}
		return smallest;
	}
}
    在這裏,T要確保有compareTo方法,所以採用<T extends Comparable>,將T限制爲現實了Comparable接口。

ps:<T extends bounding Type>表示T應該是綁定類型的字類型(subtype),T和綁定類型可以是類,也可以是接口。我覺得可以這樣理解,這裏的關鍵字extends非繼承中的那個關鍵字extends,對編譯器來說,都只是一個代號。設計者選擇關鍵字extends是因爲這裏更接近子類的概念。




參考資料:

《java核心技術卷一》

thomescai http://blog.csdn.net/thomescai(轉載請保留) 

發佈了50 篇原創文章 · 獲贊 15 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章