Better

业精于勤荒于嬉

Java反射5-方法

Better's Avatar 2017-02-23 Java译文

  1. 1. 获取方法对象
  2. 2. 方法的参数和返回类型
  3. 3. 操作方法
  • Obtaining Method Objects
  • Method Parameters and Return Types
  • Invoking Methods using Method Object

反射获取到类的方法是通过类java.lang.reflect.Method类来完成的。本文将介绍类Method.

获取方法对象

方法对象可以向这样获取:

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

methods返回的值是类中所有什么为public的方法。
如果你知道某个方法的参数,你可以获取到特点的方法而不是获取所有的方法。比如例子中你知道方法的名称是doSomething,它的一个参数是String类型的,你可以这样获取:

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

如果没有这个方法,或者方法对应的参数不是String类型的将会抛出NoSucnMethodException
如果你试图获取一个无参的方法你一个传递null最为参数:

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

方法的参数和返回类型

你可以这样获取方法的参数:

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

你可以这样获取方法的返回值:

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

操作方法

你可以通过使用Method对象来调用对象方法:

1
2
3
4
//get method that takes a String as argument
Method method = MyObject.class.getMethod("doSomething", String.class);

Object returnValue = method.invoke(null, "parameter-value1");

null参数表示的是你想调用方法的对象。如果一个方法是静态static的你应该传递一个null最为参数,而不是对应的类对象。但是你必须指定你操作的方法的每个参数的确定的值。本例中我使用了一个参数为String类型的方法,所以一个String值parameter-value1必须指定。

原文

This article was last updated on days ago, and the information described in the article may have changed.