標籤:java泛型深入
JAVA泛型深入
1) 泛型(類型)的擦除:java的泛型只在編譯時間有效,運行時是不帶有泛型資訊的(class檔案中不帶有泛型資訊)。
例如:寫了一個測試程式,然後用反編譯軟體查看Class檔案。
//java檔案
package generacdemo;
import java.util.ArrayList;
import java.util.List;
public class Genertest {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();//帶泛型
List<Integer> list1=new ArrayList<Integer>();//帶泛型
list.add("java");
list1.add(300);
//擷取泛型對象的Class對象
String a=list.getClass().getName();
String b=list1.getClass().getName();
System.out.println(a+"\t"+b);
}
}
//class檔案
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/28/wKioL1V1XwewxGDOAAFPhVvh5Yw463.jpg" title="QQ圖片20150608171554.png" alt="wKioL1V1XwewxGDOAAFPhVvh5Yw463.jpg" />
通過對比可以得知,在編譯成class檔案時,是不帶有泛型資訊的。
添加泛型型別的類的Class對象是否為同一個,通過輸出2個泛型對象的Class對象,輸出如下:
java.util.ArrayListjava.util.ArrayList
可以看出2個泛型對象的Class對象為同一個,也就是說運行時是沒有泛型的。
2)泛型子類
List<Object> list1;
List<String> list2;
list1=list2;//編譯錯誤
list1與list2是2個不同的泛型類,編譯時間不會通過的。
3)反射獲得泛型
參考資料:http://www.blogjava.net/fancydeepin/archive/2012/08/25/386241.html
JAVA泛型深入