ฉันต้องการที่จะเรียกใช้main
วิธีการซึ่งเป็นแบบคงที่ ฉันได้รับประเภทของวัตถุClass
แต่ฉันไม่สามารถสร้างตัวอย่างของคลาสนั้นและยังไม่สามารถเรียกใช้static
เมธอดmain
ได้
ฉันต้องการที่จะเรียกใช้main
วิธีการซึ่งเป็นแบบคงที่ ฉันได้รับประเภทของวัตถุClass
แต่ฉันไม่สามารถสร้างตัวอย่างของคลาสนั้นและยังไม่สามารถเรียกใช้static
เมธอดmain
ได้
คำตอบ:
// String.class here is the parameter type, that might not be the case with you
Method method = clazz.getMethod("methodName", String.class);
Object o = method.invoke(null, "whatever");
ในกรณีที่วิธีการใช้งานส่วนตัวแทนgetDeclaredMethod()
getMethod()
และเรียกใช้setAccessible(true)
บนเมธอด object
จาก Javadoc ของ Method.invoke ():
หากวิธีการพื้นฐานเป็นแบบคงที่แล้วอาร์กิวเมนต์ obj ที่ระบุจะถูกละเว้น อาจเป็นโมฆะ
จะเกิดอะไรขึ้นเมื่อคุณ
คลาสคลาส = ... ; วิธีการ m = klass.getDeclaredMethod (methodName, paramtypes); m.invoke (null, args)
String methodName= "...";
String[] args = {};
Method[] methods = clazz.getMethods();
for (Method m : methods) {
if (methodName.equals(m.getName())) {
// for static methods we can use null as instance of class
m.invoke(null, new Object[] {args});
break;
}
}
public class Add {
static int add(int a, int b){
return (a+b);
}
}
ในตัวอย่างข้างต้น 'เพิ่ม' เป็นวิธีคงที่ที่ใช้จำนวนเต็มสองเป็นอาร์กิวเมนต์
ตัวอย่างต่อไปนี้ใช้เรียกวิธีการ 'เพิ่ม' ด้วยอินพุต 1 และ 2
Class myClass = Class.forName("Add");
Method method = myClass.getDeclaredMethod("add", int.class, int.class);
Object result = method.invoke(null, 1, 2);