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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wconho 中级黑马   /  2014-3-27 22:03  /  857 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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
        }
}

1 个回复

倒序浏览
这样改一下就可以了,那么为什么要这么该呢?后面解释
  1. package gg.dao;
  2. import java.util.ArrayList;

  3. public class GenericTest {
  4.         public static void main(String[] args)throws Exception{
  5.         
  6.                 //使用反射向泛型集合中添加其他元素
  7.                
  8.                 //泛型变量是:String时,通过使用反射向集合填入整数12 ,获取集合元素时出错??
  9.                 ArrayList<String> array1 = new ArrayList<String>();               
  10.                 array1.getClass().getMethod("add",Object.class).invoke(array1,12);  
  11.                
  12.               
  13.                 System.out.println(String.valueOf(array1.get(0)));
  14.             
  15.                
  16.                 //错误提示:Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
  17.                
  18.                 //泛型变量是:Integer,通过使用反射向集合填入字符串,在获取集合元素时,就没有出错呢?
  19.                 ArrayList<Integer> array2 = new ArrayList<Integer>();
  20.                 array2.getClass().getMethod("add",Object.class).invoke(array2,"acc");               
  21.                 System.out.println(array2.get(0));
  22.                 //打印出:acc
  23.         }
  24. }
复制代码


首先必须知道并不是get方法导致的错误,而是println方法导致的,为什么会导致呢?看一下这个图片,它接受的是一个String类型的参数


这就相当于 String str=12这么写,肯定会出错所以String str=String.Valueof(12);

13.png (5.5 KB, 下载次数: 20)

13.png

评分

参与人数 1黑马币 +6 收起 理由
wconho + 6 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马