1. 程式人生 > >【Java基礎】泛型記錄概要

【Java基礎】泛型記錄概要

泛型記錄概要

泛型出現重要原因之一:創造容器類

泛型主要目的之一:指定容器持有什麼型別的物件,保證編譯的正確性

泛型簡單例項

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>

型別引數推斷避免了重複的泛型引數列表

泛型用於匿名內部類

泛型的好處之一是簡單而安全的建立複雜模型

在泛型內部,無法獲得任何有關泛型引數型別的資訊