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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘江华 黑马帝   /  2011-10-5 23:29  /  2530 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

现在有这样一个问题:
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)这个方法。求解。。。谢谢各位啦。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-10-5 23:48:52
沙发
getMethod(),当你指定了参数类型以后是不会随机选一个给你的,你说的这种情况是只指定了方法名字,而没有指定参数类型的时候才会发生的

如果你要调用remove(int  index)这个方法就应该是这样
collection.getClass().getMethod("remove",int.class).getName();
回复 使用道具 举报
黑马网友  发表于 2011-10-5 23:56:54
藤椅
[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]传入的参数是什么类型就调用了哪个方法
回复 使用道具 举报
这样啊。多谢。

评分

参与人数 1技术分 +1 黑马币 +2 收起 理由
admin + 1 + 2

查看全部评分

回复 使用道具 举报
  1. collection.getClass().getMethod("remove",int.class).getName();
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马