Java反射机制 invoke调用含多个参数的方法

通过Java的反射机制调用某个方法,并传入参数。

1.只传入一个参数hello world:

import java.lang.reflect.Method;
import java.util.Date;

public class InvokeMethodTest {
    public static void main(String[] args) {
        test1();
    }

    public static void test2() {
        try {
            Class<?> c = Class.forName("java.util.Date");
            // 反射类的方法:
            Method m = c.getMethod("getTime", new Class<?>[] {});
            long l = (Long) m.invoke(c.newInstance(), new Object[] {});
            System.out.println(l);
            // 反射一个类的实例:
            Date d = (Date) c.newInstance();
            System.out.println(d.getTime());
        } catch (Exception e) {
        }
    }

    public static void test1() {
        try {
            Class<?> c = InvokeMethodTest.class;
            // 反射类的方法:
            Method m = c.getMethod("print", String.class);
            m.invoke(c.newInstance(),"hello world");
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public static void print(String printData) {
        System.out.println("=====================================");
        System.out.println(printData);
    }
    
    public static void print(String firstPrintData,String secondPrintData) {
        System.out.println("=====================================");
        System.out.println("firstPrintData:"+firstPrintData+", secondPrintData:"+secondPrintData);
    }
}

2.传入两个参数hello world以及 i am lee

import java.lang.reflect.Method;
import java.util.Date;

public class InvokeMethodTest {
    public static void main(String[] args) {
        test1();
    }

    public static void test2() {
        try {
            Class<?> c = Class.forName("java.util.Date");
            // 反射类的方法:
            Method m = c.getMethod("getTime", new Class<?>[] {});
            long l = (Long) m.invoke(c.newInstance(), new Object[] {});
            System.out.println(l);
            // 反射一个类的实例:
            Date d = (Date) c.newInstance();
            System.out.println(d.getTime());
        } catch (Exception e) {
        }
    }

    public static void test1() {
        try {
            Class<?> c = InvokeMethodTest.class;
            // 反射类的方法:
            Method m = c.getMethod("print", String.class, String.class);
            m.invoke(c.newInstance(),"hello world","I am lee");
        } catch (Exception e) {
            System.out.println(e);
        }
    }

    public static void print(String printData) {
        System.out.println("=====================================");
        System.out.println(printData);
    }
    
    public static void print(String firstPrintData,String secondPrintData) {
        System.out.println("=====================================");
        System.out.println("firstPrintData:"+firstPrintData+", secondPrintData:"+secondPrintData);
    }

可以比较 这两句话有什么区别,就可以知道更多的参数该怎样传,简单但是很少用到过,记录一下收工

Method m = c.getMethod("print", String.class, String.class);
m.invoke(c.newInstance(),"hello world","I am lee");

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值