一些关于泛型的例子(有的是借鉴别人的)
1.java泛型的本质:编译时有限制,运行时类型擦除
2.java泛型中没有继承关系即:
Integer extends Number 成立
<Integer> 继承<Number> 不成立
3.java泛型的上下边界
限定通配符的上边界
正确:Vertor<? extends Number> x=new Vector<Integer>();
错误: Vector<? extends Number> y=new Vector<String>();
限定通配符的下边界
正确:Vector<? super Integer> x=new Vector<Number>();
错误:Vector<? super Integer> y=new Vector<Byte>();
public class Generic<T> { private T t; public void setT(T t) { this.t = t; } public T getT() { return t; } public void test1() { List list = new ArrayList(); list.add(123456); list.add("llilamei"); Integer integer = (Integer) list.get(0); String str = (String) list.get(1); System.out.println(integer + str); } //泛型练习1 public void test2() { List<String> list = new ArrayList<String>(); list.add("zhangsan"); list.add("lisi"); System.out.println(list.get(0) + " " + list.get(1)); } //String练习 public void test3() { String a = "123"; doTest(a); System.out.println(a.equals("123")); } public void doTest(String str) { str = str + "123"; } //泛型练习2(反射) public void test4() throws Exception { Constructor<String> consStr = String.class.getConstructor(StringBuilder.class); String str = consStr.newInstance(new StringBuilder("zhangsan")); System.out.println("zhangsan".equals(str)); } //泛型练习4 public void test5() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { List<Integer> list = new ArrayList<Integer>(); @SuppressWarnings("rawtypes") Class<List> listClass = List.class; Method method = listClass.getMethod("add", Object.class); method.invoke(list, "zhangsan"); // list.get(0).equals("zhangsan"); } //泛型练习5 //交换数组下标 public <T> void test6(T[] array, int left, int right) { T t = array[left]; array[left] = array[right]; array[right] = t; } //将一个数组中元素复制到另一个数组中 public <T> void copy1(T[] src, T[] dest) { for (int i = 0; i < src.length; i++) { dest[i] = src[i]; } } //将一个集合中的元素复制到一个数组中 public <T> void copy2(List<T> list,T[] array){ for(int i=0;i<list.size();i++){ array[i]=list.get(i); } }
public class Main { public static void main(String[] args) throws Exception { Generic generic = new Generic(); String[] arraystr = new String[]{"zhangsan", "lisi", "wanger", "lidalong"}; Integer[] arrayint = new Integer[]{11, 32, 43, 21, 48, 0}; Integer[] arraynew = new Integer[arrayint.length]; List<Integer> list= Arrays.asList(arrayint); generic.test1(); generic.test2(); generic.test3(); generic.test4(); generic.test5(); generic.test6(arraystr, 0, 2); generic.test6(arrayint, 2, 5); generic.copy1(arrayint, arraynew); for (int i : arraynew) { System.out.print(i + " "); } generic.copy2(list,arraynew); for (int i : arraynew) { System.out.print(i + " "); } } }