泛型T
泛型的許多最佳例子都來自集合框架,由於泛型讓您在保存在集合中的元素上指定類型約束。
在定義泛型類或聲明泛型類的變量時,使用尖括號來指定形式類型參數。形式類型參數與實際類型參數之間的關係相似於形式方法參數與實際方法參數之間的關係,只是類型參數表示類型,而不是表示值。html
有沒有可能不指定類型?有沒有可能在運行時才知道具體的類型是什麼?編程
因此,就出現了泛型。segmentfault
eg:
public class Container<K, V> {
private K key;
private V value;框架
public Container(K k, V v) {
key = k;
value = v;
}spa
在編譯期,是沒法知道K和V具體是什麼類型,只有在運行時纔會真正根據類型來構造和分配內存.net
一個基本的原則是:不管什麼時候,只要你能作到,你就應該儘可能使用泛型方法。也就是說,若是使用泛型方法能夠取代將整個類泛化,那麼應該有限採用泛型方法htm
public class Main {blog
public static <T> void out(T t) {
System.out.println(t);
}接口
public static void main(String[] args) {
out("findingsea");
out(123);
out(11.11);
out(true);
}
}內存
能夠看到方法的參數完全泛化了,這個過程涉及到編譯器的類型推導和自動打包,也就說原來須要咱們本身對類型進行的判斷和處理,如今編譯器幫咱們作了。這樣在定義方法的時候沒必要考慮之後到底須要處理哪些類型的參數,大大增長了編程的靈活性。
再看一個泛型方法和可變參數的例子:
public class Main {
public static <T> void out(T... args) {
for (T t : args) {
System.out.println(t);
}
}
public static void main(String[] args) {
out("findingsea", 123, 11.11, true);
}
}
輸出和前一段代碼相同,能夠看到泛型能夠和可變參數很是完美的結合。
參考:
Java泛型:泛型類、泛型接口和泛型方法 - findingea - SegmentFault
https://segmentfault.com/a/1190000002646193
Java泛型詳解 - Jinuxwu的專欄 - 博客頻道 - CSDN.NET
http://blog.csdn.net/jinuxwu/article/details/6771121/
Java 可變參數 - 蠱惑Into - 博客園http://www.cnblogs.com/whgw/archive/2011/10/01/2197103.html