黑马程序员技术交流社区
标题:
Java 泛型问题
[打印本页]
作者:
wconho
时间:
2014-3-27 22:03
标题:
Java 泛型问题
本帖最后由 wconho 于 2014-3-28 11:41 编辑
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(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
}
}
作者:
霍振鹏
时间:
2014-3-28 00:35
这样改一下就可以了,那么为什么要这么该呢?后面解释
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);
13.png
(5.5 KB, 下载次数: 21)
下载附件
2014-3-28 00:33 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2