使用反射可以检视类的方法,并在运行时调用。这是通过类java.lang.reflect.Method实现的。本文将深入介绍Method对象。

获得方法对象

Method通过Class对象获得。示例代码如下:

Class aClass = ...//obtain class object
Method[] methods = aClass.getMethods();

Method[] 数组拥有一个类定义的所有公共方法的实例。
如果知道方法参数的精确类型,有比获得所有方法更优的(获得方法的方式)。本例中,名为doSomething的方法需要一个String类型的参数:

Class  aClass = ...//obtain class object
Method method =    aClass.getMethod("doSomething", new Class[]{String.class});

如果没有方法匹配给定的方法名和参数,如例子中的String.class,将抛出NoSuchMethodException
如果你尝试访问没有参数的方法,传null代替参数数组,如下:

Class  aClass = ...//obtain class object
Method method = aClass.getMethod("doSomething", null);

方法参数和返回值类型

你可以通过如下代码获得方法的参数类型列表:

Method method = ... // obtain method - see above
Class[] parameterTypes = method.getParameterTypes();

访问方法返回值的代码如下:

Method method = ... // obtain method - see above
Class returnType = method.getReturnType();

使用方法对象调用方法

调用方法的代码如下:

//get method that takes a String as argument
Method method = MyObject.class.getMethod("doSomething", String.class);
Object returnValue = method.invoke(null, "parameter-value1");

null参数是拥有你想调用方法的实例。如果方法是静态的,传null代替类实例。本例中,如果doSomething(String.class) 不是静态的,必须传有效的MyObject类的实例代替null
Method.invoke(Object target, Object ... parameters)方法的参数是可变参,但你调用时必须保证型参、实参一一对应。本例中,方法需要一个String,所以必须提供一个String类型的参数。


团结
128 声望8 粉丝

诗酒趁年华