黑马程序员技术交流社区

标题: 再往已定义好的泛型中加入其它类型数据过程中的疑惑 [打印本页]

作者: 柯玲    时间: 2012-7-23 11:12
标题: 再往已定义好的泛型中加入其它类型数据过程中的疑惑
看如下程序:
  1. public static void main(String[] args) {
  2. ArrayList<Integer> list = new ArrayList<Integer>();
  3. try {
  4. Method addMethod=list.getClass().getMethod("add", Object.class);
  5. //这里要传入String类型,为什么只能是Object.class,而用String.class会报告NoSuchMethodException
  6. addMethod.invoke(list, "nihao");
  7. System.out.println(list.get(0));
  8. } catch (NoSuchMethodException e) {
  9. e.printStackTrace();
  10. } catch (SecurityException e) {
  11. e.printStackTrace();
  12. } catch (IllegalAccessException e) {
  13. e.printStackTrace();
  14. } catch (IllegalArgumentException e) {
  15. e.printStackTrace();
  16. } catch (InvocationTargetException e) {
  17. e.printStackTrace();
  18. }
  19. }
复制代码

作者: 王贵朝    时间: 2012-7-23 11:14
沙发,我也不懂,求解释!!
作者: 李东升    时间: 2012-7-23 11:53
NoSuchMethodException的意思是,没有这个方法。。
  1. public Method getMethod(String name, Class<?>... parameterTypes)
  2.         throws NoSuchMethodException, SecurityException {
  3.         // be very careful not to change the stack depth of this
  4.         // checkMemberAccess call for security reasons
  5.         // see java.lang.SecurityManager.checkMemberAccess
  6.         checkMemberAccess(Member.PUBLIC, ClassLoader.getCallerClassLoader());
  7.         Method method = getMethod0(name, parameterTypes);
  8.         if (method == null) {
  9.             throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
  10.         }
  11.         return method;
  12.     }
复制代码
你调用的这个方法,Method method = getMethod0(name, parameterTypes);是这样获取的,错误在于第二个参数,第二个参数限定了参数类型,Object和String肯定有区别。
我只能这么理解了。。
作者: 柯玲    时间: 2012-7-23 12:25
有木有更好的答案?既然第二个参数的意思是“调用方法包含的参数类型列表”,我的add就要加入String类型的,为什么不能直接写String.class?
作者: 事在亽爲ヽ    时间: 2012-8-28 23:56
不错 很详细了。。
作者: 许庭洲    时间: 2012-8-30 09:14
本帖最后由 许庭洲 于 2012-8-30 09:36 编辑

1. 用ArrayList的麻烦的地方,数据放进去就不知道是什么类型了;
2. 用ArrayList不能防止非法类型数据的放入;
3. 最好用Object.class,因为Object是所有类的父类,而用String.class会报告NoSuchMethodException异常。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2