黑马程序员技术交流社区

标题: 为什么获得Method object时不需指定回返类型? [打印本页]

作者: 赵宇    时间: 2012-9-23 16:18
标题: 为什么获得Method object时不需指定回返类型?
为什么获得Method object时不需指定回返类型?
是只要指定
了method名称和参数列,就一定指出了
一个独一无二的method。
是这个原因吗?
还是有其他原因??
作者: 孔肖    时间: 2012-9-23 16:34
不太理解你的问题要问的什么?是通过反射获取某个类中的某个方法吗?

如果是这样的话,是不需要指定返回值的。

例如 :
         public static void methodReflect() throws Exception
         {
                  String str = "hello";
  
                // getMethod()返回要获取的方法。"charAt"是方法名,int.class是方法参数
                Method method = String.class.getMethod("charAt", int.class);
  
              // 得到方法后,再用method的invoke()方法,调用获得的charAt()方法
             System.out.println(method.invoke(str, 1));
        }

getMethod(methodName,parameter)无需指定返回值类型。这里就要提一下函数重载。

函数的重载是,在同一个类中,允许有一个以上的同名函数,只要它们的参数个数或参数类型不同即可,与返回值类型无关。

因为即使有函数名和参数都相同,而返回值不同,也会报错的!因为调用者不知道到底该方法的返回值是什么。

所以,在通过上面的反射方法获取某个类的方法时,就不用指定返回值了!



作者: 王海宇    时间: 2012-9-23 17:06
因为我们是无法仅仅通过方法的返回值来区分不同方法的。例如,你要调用某个方法,假设好几个方法只有返回值不一样,其他的例如方法名,需求参数等都一样,那到底应该调哪个呢?没法确定,因为调用哪个都是合乎情理的,在计算机中是不允许出现这种难以抉择的情况的,当然也就不存在只有返回值类型不同的多个方法了。这样一来,也就决定了在使用反射获取某个方法时是不能通过方法的返回值来获取的,还是那句话,因为不存在只有返回值类型不同的而其他地方都相同的多个方法




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