[英]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.