这样改一下就可以了,那么为什么要这么该呢?后面解释
- package gg.dao;
- import java.util.ArrayList;
- public class GenericTest {
- public static void main(String[] args)throws Exception{
-
- //使用反射向泛型集合中添加其他元素
-
- //泛型变量是:String时,通过使用反射向集合填入整数12 ,获取集合元素时出错??
- ArrayList<String> array1 = new ArrayList<String>();
- array1.getClass().getMethod("add",Object.class).invoke(array1,12);
-
-
- System.out.println(String.valueOf(array1.get(0)));
-
-
- //错误提示:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
-
- //泛型变量是:Integer,通过使用反射向集合填入字符串,在获取集合元素时,就没有出错呢?
- ArrayList<Integer> array2 = new ArrayList<Integer>();
- array2.getClass().getMethod("add",Object.class).invoke(array2,"acc");
- System.out.println(array2.get(0));
- //打印出:acc
- }
- }
复制代码
首先必须知道并不是get方法导致的错误,而是println方法导致的,为什么会导致呢?看一下这个图片,它接受的是一个String类型的参数
这就相当于 String str=12这么写,肯定会出错所以String str=String.Valueof(12);
|
|