----------- 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());
}
}
上面是泛型類的聲明。
當然泛型的構成還有接口和方法的聲明,和泛型構造器的聲明
泛型接口
一個接口可以有多個類型變量,類型變量有<>括起來,放在接口名的後面
|
----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------