java泛型
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class FanXing {
@Test
public void test1() {
List arrayList1 = new ArrayList();
arrayList1.add("abc");
List arrayList2 = new ArrayList();
arrayList2.add(123);
System.err.println(arrayList1.getClass() == arrayList2.getClass());
// 我們定義了兩個ArrayList數組,不過一個是ArrayList泛型類型,只能存儲字符串。
// 一個是ArrayList泛型類型,只能存儲整形。
// 最後,我們通過arrayList1對象和arrayList2對象的getClass方法獲取它們的類的信息,
// 最後發現結果爲true。說明泛型類型String和Integer都被擦除掉了,只剩下了原始類型。
}
//關於泛型變量的使用,是會在編譯之前檢查的。
@Test
public void test2(){
try {
List arrayList3 = new ArrayList();
arrayList3.add(1);// 這樣調用add方法只能存儲整形,因爲泛型類型的實例爲Integer
//arrayList3.getClass().getMethod("add", Object.class).invoke(arrayList3, "asd");
Method method=arrayList3.getClass().getMethod("add", Object.class);
method.invoke(arrayList3, "asdf");
for (int i = 0; i < arrayList3.size(); i++) {
System.err.println("第"+i+"個元素==="+arrayList3.get(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test3(){
ArrayList arrayList1 = new ArrayList();
arrayList1.add("1");// 編譯通過
//arrayList1.add(1);// 編譯錯誤
String str1 = arrayList1.get(0);// 返回類型就是String
ArrayList arrayList2 = new ArrayList();
arrayList2.add("1");// 編譯通過
arrayList2.add(1);// 編譯通過
Object object = arrayList2.get(0);// 返回類型就是Object
new ArrayList().add("11");// 編譯通過
//new ArrayList().add(22);// 編譯錯誤
String string = new ArrayList().get(0);//返回類型就是String
//類型檢查就是針對引用的,誰是一個引用,用這個引用調用泛型方法,就會對這個引用調用的方法進行類型檢測,而無關它真正引用的對象。
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.