1. 程式人生 > >Java泛型Generic - Thinking in Java讀書筆記

Java泛型Generic - Thinking in Java讀書筆記

asp som 但是 oid 而且 containe nbsp 來替 note

1.什麽是泛型?

泛型就是可適用於很多的類,它實現了參數化類型type parameter的概念,參數化類型指可使用多種類型。

多態是一種泛化機制。

例如方法 A(Base b){}//Base是一個基類

這樣方法A就可以接受從這個基類Base的任何子類作為參數。方法的參數也可以是一個接口,但是由於類的單繼承體系和接口的約束(

An interface still requires that your code works with that particular interface.

),不能實現將代碼應用於不明確的類型,無法做到松耦合。

2.什麽時候用到泛型?怎麽用?

1)創造容器類。Create container classes.

There are some cases where you want a container to hold multiple types of objects, but typically you only put one type of object into a container. One of the primary motivations for generics is to specify what type of object a container holds, and to have that specification backed up by the compiler.

有些情況下你想用一個容器來持有多種對象,但容器通常只能存儲一種對象。泛型最主要的一個目的是說明一個容器能持有什麽類型的對象,而且由編譯器來保證準確性。

所以我們可以暫時不指定類型,稍後再決定具體類型。使用type parameter類型參數,用<>尖括號括住,放在類名後面,等到使用這個類時再用一個實際的類型來替換,例子如下,

public class Holder3<T> {
  private T a;
  public Holder3(T a) { this.a = a; }
  public void set(T a) { this.a = a; }
  public T get() { return a; }
  public static void main(String[] args) {
    Holder3<Automobile> h3 =
      new Holder3<Automobile>(new Automobile());
    Automobile a = h3.get(); // No cast needed
    // h3.set("Not an Automobile"); // Error
    // h3.set(1); // Error

  }
 } ///:~

20180124未完待續... 

轉自維基百科中Java泛型

https://zh.wikipedia.org/wiki/%E6%B3%9B%E5%9E%8B

Java 的泛型[編輯]

參見:Java

Java 泛型的參數只可以代表類,不能代表個別對象。由於Java泛型的類型參數之實際類型在編譯時會被消除,所以無法在運行時得知其類型參數的類型,而且無法直接使用基本值類型作為泛型類型參數。Java編譯程序在編譯泛型時會自動加入類型轉換的編碼,故運行速度不會因為使用泛型而加快。

由於運行時會消除泛型的對象實例類型信息等缺陷經常被人詬病,Java及JVM的開發方面也嘗試解決這個問題,例如Java通過在生成字節碼時添加類型推導輔助信息,從而可以通過反射接口獲得部分泛型信息。通過改進泛型在JVM的實現,使其支持基本值類型泛型和直接獲得泛型信息等。

Java允許對個別泛型的類型參數進行約束,包括以下兩種形式[2](假設T是泛型的類型參數,C是一般類、泛類,或是泛型的類型參數):

  • T實現接口I
  • TC,或繼承自C

Java泛型Generic - Thinking in Java讀書筆記