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)方法采用可选数量的参数,但是在调用的方法中,我们必须为每个参数提供一个参数。在这种情况下,这是一个采用"字符串"的方法,因此必须提供一个"字符串"。