黑马程序员技术交流社区
标题:
反射问题。
[打印本页]
作者:
刘江华
时间:
2011-10-5 23:29
标题:
反射问题。
现在有这样一个问题:
ArrayList<Integer> collection = new ArrayList<Integer>();
collection.add(5);
//大家都知道ArrayList 有两个不同参数的remove方法:remove(int index),remove(Object o)
collection.getClass().getMethod("remove",Object.class).getName();
//上面的只有得到名字,但是不是具体的带有参数类型的方法名字。怎么才能得到呢。(看JDK API上说是如果有相同名字的方法,它会任意选一个)
还有就是为什么上面的一定要用Object.class而不用Integer.class,用Integer的时候就包NoSuchMethodException异常,不解中啊。因为我要调用remove(int index)这个方法。求解。。。谢谢各位啦。
。
作者:
匿名
时间:
2011-10-5 23:48
getMethod(),当你指定了参数类型以后是不会随机选一个给你的,你说的这种情况是只指定了方法名字,而没有指定参数类型的时候才会发生的
如果你要调用remove(int index)这个方法就应该是这样
collection.getClass().getMethod("remove",int.class).getName();
作者:
匿名
时间:
2011-10-5 23:56
[code=java]collection.getClass().getMethod("remove",Object.class);[/code]上面这个拿到的remove这个方法,在ArrayList中,有两个名为remove的方法(重载),它们的参数类型不同,上面的是调用了remove(Object obj);这个方法,还有一个方法,传入的参数为整数类型,而不是Integer类型。
所以你要根据索引删除,你应该这样写[code=java]collection.getClass().getMethod("remove", int.class);[/code]传入的参数是什么类型就调用了哪个方法
作者:
刘江华
时间:
2011-10-6 11:26
这样啊。多谢。
作者:
盖保宁
时间:
2011-10-6 11:38
collection.getClass().getMethod("remove",int.class).getName();
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2