老师的例子结果没问题:
package cn.itcast.day2;
import java.util.*;
public class GenericDemo {
/**
* @param args
*/
public static void main(String[] args)throws Exception {
ArrayList<Integer> collection = new ArrayList<Integer>();
//collection.add(1);//集合泛型限定是Integer然而我却想通过反射的方式给他add一个字符串
collection.getClass().getMethod("add", Object.class).invoke(collection,"abc");
collection.add(2);
System.out.println(collection.get(0)+" and "+collection.get(1));
}
}
输出结果:
abc and 2
我把泛型限定类型改了下,Integer改成String然后反射进一个Integer,同样的操作方式这里要抛出异常,类型转换失败。运行结果:复制代码
- import java.util.*;
- public class GenericDemo {
- /**
- * @param args
- */
- public static void main(String[] args)throws Exception {
- ArrayList<String> collection = new ArrayList<String>();
- //collection.add(1);//集合泛型限定是String然而我却想通过反射的方式给他add一个整数
- collection.getClass().getMethod("add", Object.class).invoke(collection,new Integer(1));
- //collection.add("abc");
- System.out.println(collection.get(0)+" and "+collection.get(1));
- }
- }
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at cn.itcast.day2.GenericDemo.main(GenericDemo.java:16)
q5486555 发表于 2013-5-26 23:50
lz可以试试将collection.get()的结果用Object接受一下再打印就可以了
原理就在于泛型和printIn方法,你的例 ...
何俊森 发表于 2013-5-23 20:27
不懂,我用了先编译后在反编译一下,虽然不同的源文件可以生成一样的.class文件,但是这些源文件实现了相同 ...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |