泛型T
泛型的許多最佳例子都來自集合框架,因為泛型讓您在保存在集合中的元素上指定類型約束。
在定義泛型類或聲明泛型類的變量時,使用尖括號來指定形式類型參數。形式類型參數與實際類型參數之間的關系類似於形式方法參數與實際方法參數之間的關系,只是類型參數表示類型,而不是表示值。
有沒有可能不指定類型?有沒有可能在運行時才知道具體的類型是什么?
所以,就出現了泛型。
eg:
public class Container<K, V> {
private K key;
private V value;
public Container(K k, V v) {
key = k;
value = v;
}
在編譯期,是無法知道K和V具體是什么類型,只有在運行時才會真正根據類型來構造和分配內存
一個基本的原則是:無論何時,只要你能做到,你就應該盡量使用泛型方法。也就是說,如果使用泛型方法可以取代將整個類泛化,那么應該有限采用泛型方法
public class Main {
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