java泛型(黑馬程序員)

------- android培訓、java培訓、期待與您交流! ----------

在jdk1.5之後java出現了泛型,允許定義泛型類,接口,方法。

例如Comparable接口:

	 //在1.5之前的定義,是用Object來接受的。
	 public interface Comparable{
	 	public int CompareTo(Object o)
	 }
	//有了泛型之後:
	 public interface Comparable<T>
	 {
	 	public int CompareTo(T t)
	 }

由上面可以感到泛型的區別,當然泛型的主要作用是:可以在編譯時檢測出錯誤!

1.如何定義泛型類呢?如下:

class person<T>
{
	person()
	{		
	}
	public void sayhi(T t)
	{
		System.out.println(t+"hi");
	}
}

也就是說在定義爲泛型類時候,所有類中的T都可以是使用T相應的值。要區別的是泛型方法的定義!

2.如何定義泛型接口?如下

interface person<T>
{
	public void sayhi(T t);
}

· 3.如何定義泛型方法?如下

	 public <E> void print(E e)
	 {
	 	System.out.println(e);
	 }

在泛型方法中要注意返回值類型前的<E>!區別於泛型類。

------------------------------------------------------------------------------

在泛型中也有許多要注意的問題:

1.當你的GenericDemo<T>爲一個泛型類的時候,你的構造方法用不用加<T>?不用!爲GenericDemo()不加泛型類型!

2.泛型可以有多個參數<E,E1,E2>

3.非受限的類型<T>和<T extends Object>一樣!

4.通配符? 可以接受任意類型!

? extends E    表示接受E類型或E的子類型!

? super     E    表示接受E的父類型!

5.儘管Integer爲Object的子類型,但是GenericDemo<Integer>不是GenericDemo<Object>的子類型!

要注意的一點是什麼時候不能用泛型:

1.在靜態環境下,不可以用泛型!

2.在異常類中不可用泛型!

無論怎麼樣,都由於泛型的特殊實現方式決定的:泛型是使用一種類型消除的方法實現的!編譯器使用泛型類型信息,來編譯。但是之後消除他!因此,在運行時是沒有泛型的信息的!

在think in java中寫道:

java容器缺陷,和泛型作用:

1.對象引用加入容器的時候丟了類型信息!

2.由於丟失了類信息,所以要類型轉換,轉爲正確類型!

------- android培訓、java培訓、期待與您交流! ----------

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