标签: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<String> arrayList1 = new ArrayList<String>(); arrayList1.add("abc"); List<Integer> arrayList2 = new ArrayList<Integer>(); arrayList2.add(123); System.err.println(arrayList1.getClass() == arrayList2.getClass()); // 我们定义了两个ArrayList数组,不过一个是ArrayList<String>泛型类型,只能存储字符串。 // 一个是ArrayList<Integer>泛型类型,只能存储整形。 // 最后,我们通过arrayList1对象和arrayList2对象的getClass方法获取它们的类的信息, // 最后发现结果为true。说明泛型类型String和Integer都被擦除掉了,只剩下了原始类型。 } //关于泛型变量的使用,是会在编译之前检查的。 @Test public void test2(){ try { List<Integer> arrayList3 = new ArrayList<Integer>(); 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<String> arrayList1 = new ArrayList(); arrayList1.add("1");// 编译通过 //arrayList1.add(1);// 编译错误 String str1 = arrayList1.get(0);// 返回类型就是String ArrayList arrayList2 = new ArrayList<String>(); arrayList2.add("1");// 编译通过 arrayList2.add(1);// 编译通过 Object object = arrayList2.get(0);// 返回类型就是Object new ArrayList<String>().add("11");// 编译通过 //new ArrayList<String>().add(22);// 编译错误 String string = new ArrayList<String>().get(0);//返回类型就是String //类型检查就是针对引用的,谁是一个引用,用这个引用调用泛型方法,就会对这个引用调用的方法进行类型检测,而无关它真正引用的对象。 } }
本文出自 “w51spring” 博客,请务必保留此出处http://w51spring.blog.51cto.com/7524892/1775082
标签:java泛型
原文地址:http://w51spring.blog.51cto.com/7524892/1775082