黑马程序员技术交流社区
标题:
泛型中遇到的一个问题
[打印本页]
作者:
彭坤
时间:
2012-2-18 10:15
标题:
泛型中遇到的一个问题
本帖最后由 彭坤 于 2012-2-18 14:44 编辑
基础加强37中张老师用代码演示了运用反射往intList里插入String类型的对象,顺手在下面加了一段代码测试运用反射往strList里插入Integer类型的对象,但是报错了
贴上来跟大伙研究研究原因。
import java.util.ArrayList;
import java.util.List;
public class GenericTest {
public static void main(String[] args) throws Exception {
List<Integer> intList = new ArrayList<Integer>();
List<String> strList = new ArrayList<String>();
System.out.println(intList.getClass() == strList.getClass());
//运用反射往intList里插入String类型的对象
intList.getClass().getMethod("add", Object.class).invoke(intList, new String("abcd"));
System.out.println(intList.get(0));
//运用反射往strList里插入Integer类型的对象
strList.getClass().getMethod("add", Object.class).invoke(strList, new Integer(2));
System.out.println(strList.get(0));
}
}
-------------运行结果--------------
true
abcd
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer
at GenericTest.main(GenericTest.java:17)
复制代码
添加了如下代码做测试
strList.isEmpty();//返回false;
strList.size();//返回1
说明是已经把值插入进去了,不是在插入的时候报错。
而是在取值的时候类型转换出错了,OMG,粗心啊粗心。问题已解决,谢谢围观,mua~
作者:
李晓俊老师
时间:
2012-2-18 10:19
围观,帮不上忙,还没学反射
作者:
花开~的季节
时间:
2012-2-18 11:13
这个错误是类型强行转换出错,当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,以下代码将生成一个 ClassCastException:
Object x = new Integer(0);
System.out.println((String)x);
这是sun公司api中自定义的,你如果把strList.get(0)
改成strList.toString();就可以解决这问题
作者:
彭坤
时间:
2012-2-18 11:40
顶上去{:soso_e103:}
作者:
邱纲
时间:
2012-2-18 12:46
我在学习反射时,也出现了好几次这样的情况,后来查了帮助文档才知道大概错在那里了,如果出现了类似情况,可以查一下帮助文档,找到这个异常情况再来判断哪里出错了。
作者:
郭繁森
时间:
2012-2-18 14:00
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer
at GenericTest.main(GenericTest.java:17)
异常意思是:类型转换异常。
API中有:
public class ClassCastExceptionextends RuntimeException当试图将对象强制转换为不是实例的子类时,抛出该异常。例如,以下代码将生成一个 ClassCastException:
Object x = new Integer(0);
System.out.println((String)x);
Integer 不能转成String
作者:
最初的理想
时间:
2012-2-18 19:33
{:soso_e179:}都是高手
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2