Java反射-方法

时间:2020-01-09 14:20:03  来源:igfitidea点击:

使用Java Reflection,我们可以检查类的方法并在运行时调用它们。这是通过Java类java.lang.reflect.Method完成的。本文将更详细地介绍有关JavaMethod对象的信息。

获取方法对象

"方法"类是从"类"对象获得的。这是一个例子:

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

"方法[]"数组将为该类中声明的每个公共方法提供一个"方法"实例。

如果知道要访问的方法的精确参数类型,则可以这样做,而不是获取所有方法的数组。此示例在给定的类中返回一个名为" 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;否则,我们需要提供一个有效的MyObject实例。

Method.invoke(Object target,Object ... parameters)方法采用可选数量的参数,但是在调用的方法中,我们必须为每个参数提供一个参数。在这种情况下,这是一个采用"字符串"的方法,因此必须提供一个"字符串"。