回答
下面是使用涉及基元的反射調用方法的一個簡單示例。
import java.lang.reflect.*;
public class ReflectionExample {
public int test(int i) {
return i + 1;
}
public static void main(String args[]) throws Exception {
Method testMethod = ReflectionExample.class.getMethod("test", int.class);
int result = (Integer) testMethod.invoke(new ReflectionExample(), 100);
System.out.println(result); // 101
}
}
是穩健的,你應該捕獲並處理所有檢查反射有關的異常NoSuchMethodException
,IllegalAccessException
,InvocationTargetException
。
@ polygenelubricants-thanks – Steven 2010-03-09 07:28:01
您可以在任何對象中使用getClass來發現其類。然後,您可以使用getMethods來發現所有可用的方法。一旦你有正確的方法,你可以調用invoke任意數量的參數
顯示示例的任何鏈接 – Steven 2010-03-09 06:49:07
這是我所知道的最簡單的方法,它需要與包圍嘗試&陷阱:
方法M = .class.getDeclaredMethod( 「」,arg_1.class,arg_2.class,... arg_n.class); result =()m.invoke(null,(Object)arg_1,(Object)arg_2 ...(Object)arg_n);
這是爲了調用一個靜態方法,如果你想調用一個非靜態方法,你需要將m.invoke()的第一個參數從null替換爲調用底層方法的對象。
不要忘記添加一個導入到java.lang.reflect。*;
如果我正在使用基元,該怎麼辦 – Steven 2010-03-09 07:02:03
@Shuky:爲什麼將參數轉換爲Object? – 2010-03-09 08:48:56
@Seteven,Carlos Heuberger:不需要投射,我的意思是他們不能是原始元素(而不是int,使用Integer等) – 2010-03-09 15:42:44
使用反射調用類方法非常簡單。 您需要創建一個類並在其中生成方法。如下所示。
package reflectionpackage;
public class My {
public My() {
}
public void myReflectionMethod() {
System.out.println("My Reflection Method called");
}
}
並使用反射在另一個類中調用此方法。
package reflectionpackage;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectionClass {
public static void main(String[] args)
throws ClassNotFoundException, NoSuchMethodException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class c=Class.forName("reflectionpackage.My");
Method m=c.getDeclaredMethod("myReflectionMethod");
Object t = c.newInstance();
Object o= m.invoke(t);
}
}
- 1. 如何在java中使用反射調用void方法
- 2. Android/Java:使用反射調用方法?
- 3. 使用反射的Java調用方法
- 4. 如何使用反射調用方法
- 5. 用Java反射調用變量方法?
- 6. 如何使用反射(Java)調用私有靜態方法?
- 7. 如何調用使用Java反射引發異常的方法?
- 8. 如何在界面使用反射中調用默認方法
- 9. 調用使用反射在Singleton類的方法在Java
- 10. 調用方法的對象 - Java反射
- 11. Java反射調用方法NoSuchMethodException
- 12. Java反射調用方法「getDeclaredConstructors」
- 13. 如何在java中使用反射調用帶有可變參數的方法?
- 14. 如何在java中使用反射調用抽象類的具體方法
- 15. 使用反射的調用方法
- 16. 使用反射調用方法
- 17. 使用反射調用靜態方法
- 18. 如何在scala中使用反射調用對象方法(不是類方法)
- 19. 使用Java進行反射投射和重載方法調度
- 20. 如何在使用反射時調用方法?
- 21. 如何使用反射調用接口中的方法
- 22. 如何使用反射來調用.NET中的重載方法
- 23. 使用反射重寫java方法
- 24. 使用Java反射類獲取方法
- 25. 如何使用Java反射
- 26. 調用setter方法使用循環變量和Java反射
- 27. 如何剖析調用的Java方法反射
- 28. 如何進一步優化Java反射方法調用?
- 29. Java反射 - 如何調用getter/setter方法?
- 30. 如何使用反射來識別java方法是否通用?
爲什麼有一個標籤'eclipse-plugin'? – fastcodejava 2010-03-09 06:47:35
我刪除了'eclipse-plugin'標籤。 – ewernli 2010-03-09 08:31:30