首页新闻找找看学习计划

java 反射问题

0
[待解决问题]

public class ArrayListDemo {
public static void main(String[] args) throws Exception, SecurityException {

ArrayList<Integer> array = new ArrayList<Integer>();
Class c = array.getClass();

Method m = c.getMethod("add", Integer.class);  
m.invoke(array, "java");
m.invoke(array, "world");
m.invoke(array, 8);
System.out.println(array);
}
}

 

问题:  Method m = c.getMethod("add", Integer.class); //这里 为什么不可以 用Integer.class  ,求讲一下 原因

mke的主页 mke | 初学一级 | 园豆:184
提问于:2016-06-13 20:35
< >
分享
所有回答(2)
0

ArrayList的add方法应该是没有返回值的, Method m = c.getMethod("add", Integer.class); 第二个参数是指该方法的返回值类型,所以运行时会报错。

嗜血苏菲 | 园豆:92 (初学一级) | 2016-06-15 14:32
0

改成这样

// Method m = c.getMethod("add", Integer.class); 
Method m = c.getMethod("add", Object.class); 

这里的第二个参数表示的是ArrayList中“add”方法的参数类型。

为什么不能是Integer?因为ArrayList<E>类使用了泛型,泛型在编译后都被原始类型替代,具体的Integer就变成了Object。

在反射的时候,ArrayList<E>实际是ArrayList<Object>,这也是为什么反射之后可以向数组添加字符串的原因,Object是所有类的基类。

 

安静的下雪天 | 园豆:274 (菜鸟二级) | 2016-11-29 13:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册