使用反射可以检视类的方法,并在运行时调用。这是通过类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
类型的参数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。