很多朋友都想知道java 泛型是什麼?下面就一起來了解一下吧~
Java泛型是JDK 5中引入的一個新特性,泛型提供了編譯時類型安全監測機制,該機制允許程序員在編譯時監測非法的類型,泛型的本質是參數化類型,也就是所操作的數據類型被指定爲一個參數。
泛型的使用
泛型有三種常用的使用方式:泛型類,泛型接口和泛型方法。下面講一一簡單介紹這三種使用方法:泛型類
一個泛型類(generic class)就是具有一個或多個類型變量的類。下面透過一個簡單的Pair類作爲例子。對於這個類來說,我們只關注泛型,而不會爲數據存儲的細節煩惱。下面是Pair類的代碼:
/* * 泛型類 * Java庫中 E表示集合的元素類型,K 和 V分別表示表的關鍵字與值的類型 * T(需要時還可以用臨近的字母 U 和 S)表示“任意類型” */public class Pair<T> { private T name; private T price; public Pair() { } public Pair(T name, T price) { this.name = name; this.price = price; } public T getName() { return name; } public void setName(T name) { this.name = name; } public T getPrice() { return price; } public void setPrice(T price) { this.price = price; }}
Pair類引入了一個類型變量T,用尖括號(<>)括起來,並放在類名的後面。泛型類可以有多個類型變量。例如,可以定義Pair類,其中第一個域和第二個域使用不同的類型:
public class Pair<T,U> { ... }
類方法中的類型變量指定方法的返回類型以及域和局部變量的類型。例如:
private T first; //uses the type variable
用具體的類型替換類型變量就可以實例化泛型類型,例如:
Pair<String>
可以將結果想象成帶有構造器的普通類:
Pair<String>()Pair<String>(String,String)
和方法:
String getName()String getPrice()void setName(String)void setPrice(String)
public interface Generator<T> { public T next();}
繼承接口:
public class FruitGenerator implements Generator<String> { @Override public String next() { return "Fruit"; }}
或者也可以這樣:
public class FruitGenerator<T> implements Generator<T> { private T next; public FruitGenerator(T next) { this.next = next; } @Override public T next() { return next; } public static void main(String[] args){ FruitGenerator<String> fruit = new FruitGenerator<>("Fruit"); System.out.println(fruit.next); }}
泛型方法
這個方法是在普通類中定義的,而不是在泛型類中定義的。然而,這是一個泛型方法,可以從尖括號和類型變量看出這一點。注意,類型變量放在修飾符(這裏是 public static)的後面,返回類型的前面。