请问:
getDeclaredMethod(String name, Class... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
问题: 这个参数Class... parameterTypes怎么理解
有这样一个例子:
Method m = cls.getDeclaredMethod("doPrint",new Class[] { String.class });文档上是这样解释的:返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方法的简称,parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形式参数类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是 "<init>” 或 “<clinit>",则引发一个 NoSuchMethodException。
getDeclaredMethod(String name, Class... parameterTypes)
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
问题: 这个参数Class... parameterTypes怎么理解
有这样一个例子:
Method m = cls.getDeclaredMethod("doPrint",new Class[] { String.class });文档上是这样解释的:返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方法的简称,parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形式参数类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是 "<init>” 或 “<clinit>",则引发一个 NoSuchMethodException。
name 是要获得类对象的方法名;
Class... parameterTypes 是一个name方法的参数数组(无参方法不写,又几个参数就定多长的数组);
例如 :
public class Test {
public String doPrint(String s,int i,Object o)
{
}
}
这是一个具有3个参数的方法 要获得他的反射方法 应该这样写。
Class cls = Class.forName(Test.class);
Class[] cl = new Class[3];//3是参数个数
cl[0] = String.class;
cl[1] = int.class;
cl[2] = Object.class;
Method m = cls.getDeclaredMethod("doPrint",cl);这个m 就是用反射获得的方法。
在Java 中,同一个类中的2个或2个以上的方法可以有同一个名字,只要它们的参数声明不同即可。在这种情况下,该方法就被称为重载(overloaded ),这个过程称为方法重载(method overloading )。方法重载是Java 实现多态性的一种方式。