簡體   English   中英

使用方法參數在Java中進行反射

[英]reflection in java with method parameters

我想用Java做一個簡單的思考

我想使用多個參數的方法?

我的課

package reflection;

import java.util.Date;

public class SimpleClass {

    public Date datum1() {
        Date d = new Date();
        return d;
    }

    public Object datum2(String str) { 
        Date d = new Date();    
        return d;
    }

}

我的測試

package reflection;

import java.lang.reflect.Method;

public class ReflectionTest {

    public Object getMethodProperty(Object object, String... args) {

        Object value = null;

        try {
            Method m = object.getClass().getMethod(args[0], new Class[] {});
            value = m.invoke(object, new Object[] {});
        } catch (Exception e) {}
        return value;
    }

    public static void main(String[] args) {

        Reflection r = new Reflection();
        SimpleClass s = new SimpleClass();

        System.out.println(r.getMethodProperty(s, "datum1", "test"));
        System.out.println(r.getMethodProperty(s, "datum2", "test"));
    }


}

第一個結果是實際日期

第二個結果為null

如何為方法使用參數?

謝謝icke

datum2()方法采用字符串。 為了找到該方法,您應該在反射調用中添加該參數:

SimpleClass s = new SimpleClass();
Method m = s.getClass().getMethod("datum2", new Class[]{String.class});
m.invoke(s, new Object[]{"foo"});

感謝martijn,在您的幫助下,現在:

類SimpleClass:

package reflection;

import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleClass {

    public Date datum1() {
        Date d = new Date();
        return d;
    }

    public String datum2(String str) {
        return str + new SimpleDateFormat("dd.MM.yyyy").format(new Date());
    }

}

反射測試類:

package reflection;

import java.lang.reflect.Method;

public class ReflectionTest {

    public Object getMethodProperty(Object object, String methodName, Object... args) {

        Object value = null;

        Method[] methods = object.getClass().getDeclaredMethods();

        for (Method m : methods) {

            if (m.getName().equals(methodName)) {

                try {
                    value = m.invoke(object, args);
                    System.out.println(m.getName());
                } catch (Exception e) {
                }
            }
        }
        return value;
    }

    public static void main(String[] args) {

        ReflectionTest r = new ReflectionTest();
        SimpleClass s = new SimpleClass();
        Object[] o1 = new Object[] { new String("datum: ")};

        System.out.println(r.getMethodProperty(s, "datum1"));
        System.out.println(r.getMethodProperty(s, "datum2", o1));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM