A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. <p>第一种情况可以编译通过。打印abc
  2. package cn.heima.day02;

  3. import java.util.ArrayList;
  4. import java.util.Collection;

  5. public class GeneriTest {

  6.         public static void main(String[] args)throws Exception{
  7.                 ArrayList<Integer> coll = new ArrayList<Integer>() ;
  8.                 coll.add(1) ;
  9.                 coll.add(2) ;
  10.                 coll.getClass().getMethod("add",Object.class).invoke(coll,"abc") ;
  11.                 System.out.println(coll.get(2)) ;
  12.         }
  13. }</p><p>
  14. 第二种情况就类型转换异常,为什么这样?
  15. package cn.heima.day02;

  16. import java.util.ArrayList;
  17. import java.util.Collection;

  18. public class GeneriTest {

  19.         public static void main(String[] args)throws Exception{
  20.                 ArrayList<String> coll = new ArrayList<String>() ;
  21.                 coll.add("abc") ;
  22.                 coll.add("bcd") ;
  23.                 coll.getClass().getMethod("add",Object.class).invoke(coll,1) ;
  24.                 System.out.println(coll.get(2)) ;
  25.         }
  26. }
  27. </p>
复制代码

评分

参与人数 1黑马币 +9 收起 理由
FFF + 9 最好把问题写在代码外面。让同学们一看就知.

查看全部评分

2 个回复

正序浏览
ArrayList<String> coll = new ArrayList<String>() ;你限制ArrayList集合里面只能存放String类型的数据, coll.getClass().getMethod("add",Object.class).invoke(coll,1) ;这句代码通过反射调用ArrayList集合里面的add方法为集合添加数据,你添加的是int类型,即使int类型自动装箱为Integer类型,也无法自动转换为String类型,就会出现异常转换问题了
回复 使用道具 举报
我试了下,只要泛型设定的是基本类型的引用类型,如Integer、Character等等,通过反射添加其他元素再进行都不会有转换异常,但是如果泛型设定的是引用类型,则会有转换异常。
这个原因我不是很清楚,你知道的话告诉我下,谢谢了。
但是你如果通过反射得到的不是方法,而是得到一个新的集合,那么你就可以添加任意类型了。
使用的时候注意下就好了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马