Java Method的invoke方法

Java中通过反射去执行某个方法时,写法需要注意。对反射用的不熟,所以这里记录一下:

获取到Class对象的Method,也就是类的某个方法(静态方法或者实例方法)

invoke执行,invoke()方法是可变长参数,如下

    public Object invoke(Object obj, Object... args)
        throws IllegalAccessException, IllegalArgumentException,
           InvocationTargetException
    {
        if (!override) {
            if (!Reflection.quickCheckMemberAccess(clazz, modifiers)) {
                Class<?> caller = Reflection.getCallerClass();
                checkAccess(caller, clazz, obj, modifiers);
            }
        }
        MethodAccessor ma = methodAccessor;             // read volatile
        if (ma == null) {
            ma = acquireMethodAccessor();
        }
        return ma.invoke(obj, args);
    }

都是Object类型,所以第一个参数为实例对象,所以在调用时,一定需要显示的写两个参数,第一个为实例对象,如果为静态方法则传null。第二个参数即被反射执行的方法的形参,如果不为null的话,直接写即可,如果为null,需要写成Object[] 数组类型。文档中写明了,对于null值,他并不知道这个可变长参数的长度,而对于非null,是编译知道的。

伪代码如下:

method.invoke(null, -10000l)

method.invoke(obj, new Object[]{null})

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以通过反射机制来调用方法,具体步骤如下: 1. 获取目标类的Class对象。可以通过`Class.forName("类名")`来获取或者直接使用目标类的`.class`属性。 2. 获取要调用的方法。可以使用`getMethod("方法名", 参数类型...)`方法来获取指定方法,如果方法是私有的,则需要使用`getDeclaredMethod("方法名", 参数类型...)`方法。 3. 设置方法的可访问性。如果要调用的方法是私有的,需要使用`setAccessible(true)`来设置可访问性。 4. 调用方法。使用`invoke(对象, 参数...)`来调用目标方法,如果是静态方法,对象参数可以为null。 下面是一个简单的示例代码: ```java import java.lang.reflect.Method; public class Main { public static void main(String[] args) throws Exception{ // 获取目标类的Class对象 Class<?> targetClass = TargetClass.class; // 获取要调用的方法 Method method = targetClass.getMethod("methodName", int.class, String.class); // 设置方法的可访问性 method.setAccessible(true); // 创建目标类的实例 TargetClass target = new TargetClass(); // 调用方法 Object result = method.invoke(target, 123, "Hello"); System.out.println(result); } } class TargetClass { public void methodName(int number, String message) { System.out.println("Number: " + number + ", Message: " + message); } } ``` 以上代码演示了如何通过反射机制调用一个方法,输出结果为:Number: 123, Message: Hello。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值