黑馬程序員-泛型入門

----------- android培訓java培訓、java學習型技術博客、期待與您交流! ------------

 

Java泛型由來的動機

理解Java泛型最簡單的方法是把它看成一種便捷語法,能節省你某些Java類型轉換(casting)上的操作:

1 List<Apple> box = ...;
2 Apple apple = box.get(0);

上面的代碼自身已表達的很清楚:box是一個裝有Apple對象的List。get方法返回一個Apple對象實例,這個過程不需要進行類型轉換。沒有泛型,上面的代碼需要寫成這樣:

1 List box = ...;
2 Apple apple = (Apple) box.get(0);

很明顯,泛型的主要好處就是讓編譯器保留參數的類型信息,執行類型檢查,執行類型轉換操作:編譯器保證了這些類型轉換的絕對無誤。

我們在聯繫集合時,經常會有這樣的錯誤:

--------------------配置: <默認>--------------------
注意: D:\TDDOWNLOAD\javawork\java集合\Collection和Iteraror接口\TestIterator.java 使用了未經檢查或不安全的操作。
注意: 要了解詳細信息,請使用 -Xlint:unchecked 重新編譯。

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

這就是編譯器提醒我們執行類型檢查,否則box 編譯就變成Object類型,需要強制轉換。

 

現在我們來一段代碼加深理解:泛型類的聲明:

public class Apple<T>//定義Apple類型時使用泛型聲明
{
	private T info;//使用T類型形參定義屬性
	private Apple()
	{
	}
	public Apple(T info)//使T類型形參來定義方法
	{
		this.info=info;
	}
	public void setInfo(T info)
	{
		this.info=info;
	}
	public T getInfo()
	{
		return this.info;
	}
	public static void main(String[] args)
	{
		//傳給T形參的是String實際類型,所以構造器的參數只能是String
		Apple<String> a1=new Apple<String>("蘋果");
		System.out.println(a1.getInfo());
		//傳給T形參的是Double實際類型,所以構造器的參數只能是Double
		Apple<Double> a2=new Apple<Double>(5.67);
		System.out.println(a2.getInfo());
	}
}

 上面是泛型類的聲明。

當然泛型的構成還有接口和方法的聲明,和泛型構造器的聲明

泛型接口

一個接口可以有多個類型變量,類型變量有<>括起來,放在接口名的後面

 

 

public interface List<T> extends Collection<T>

{

   .....
  }

 

----------- android培訓java培訓、java學習型技術博客、期待與您交流! ------------

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章