【Java基礎】泛型記錄概要
阿新 • • 發佈:2019-01-09
泛型記錄概要
泛型出現重要原因之一:創造容器類
泛型主要目的之一:指定容器持有什麼型別的物件,保證編譯的正確性
泛型簡單例項
class GenericsClass<T>{
private T property;
public GenericsClass(T property){}
}
元組(tuple)
基本概念
又稱資料傳送物件或者信使。將一組物件直接打包儲存於其中的一個單一物件,只允許往這個物件讀取其中元素,但是不允許向其中存放新的物件
目的
解決僅一次方法呼叫返回多個物件
特性
- 具有任意長度
- 存在不同型別的物件
簡單二維元組
class TwoTuple<L,R>{
public final L left;
public final R right;
public TwoTuple(L left,R right){
this.left = left;
this.right = right;
}
public String toString(){
return "(" + left + "," + right + ")";
}
}
通過繼承機制建立長度更長的元組
class ThreeTuple<L,M,R> extends TwoTuple<L,R>{ public final M middle; public TwoTuple(L left,M middle,R right){ super(left,right); this.middle = middle; } public String toString(){ return "(" + left + "," + middle + "," + right + ")"; } }
使用元組
static TwoTuple<String,Object> getTuple(){
return new TwoTuple<String,Object>("key","value");
}
public static void main(String[] args) {
TwoTuple<String,Object> tuple = getTuple();
System.out.println(tuple);
}
泛型介面
生成器(Generator)就是典型的泛型介面應用,用來負責建立物件
生成器(Generator)和工廠模式(FactoryPattern)都是負責建立物件的,兩者的區別在於前者不需要傳遞任何引數資訊,後者則需要。
基本型別無法作為型別引數。Java提供的自動打包/拆箱機制轉換
泛型方法
泛型方法可以獨立於類發生變化
Class GenericClass{
public <T> void genericMethod(T x){
//x.getClass().getName()
}
}
型別引數推斷:使用泛型方法不需要指明引數型別,編譯器會找出具體型別
槓桿利用型別引數推斷
new HashMap<Entity,List<? extends SuperClass>>()
<K,V> Map<K,V>
<T> List<T>
型別引數推斷避免了重複的泛型引數列表
泛型用於匿名內部類
泛型的好處之一是簡單而安全的建立複雜模型
在泛型內部,無法獲得任何有關泛型引數型別的資訊