1. 程式人生 > >Java反射機制 invoke呼叫含多個引數的方法

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");