要通過反射機制調(diào)用某個類的方法,主要用到了下面這個方法:
public Object invoke(Object obj,Object... args)
這個方法對帶有指定參數(shù)的指定對象調(diào)用由此 Method
對象表示的底層方法。個別參數(shù)被自動解包,以便與基本形參相匹配,基本參數(shù)和引用參數(shù)都隨需服從方法調(diào)用轉(zhuǎn)換。
參數(shù):
obj
- 從中調(diào)用底層方法的對象
args
- 用于方法調(diào)用的參數(shù)
返回:
使用參數(shù) args
在 obj
上指派該對象所表示方法的結(jié)果
下面我寫了一個完整的例子來演示invoke的具體用法
package net.xsoftlab.baike;import java.lang.reflect.Method;public class Person { public static void main(String[] args) throws Exception { Class<?> clazz = Class.forName("net.xsoftlab.baike.Person"); // 調(diào)用Person類中的run方法 Method method = clazz.getMethod("run"); method.invoke(clazz.newInstance()); // Java 反射機制 - 調(diào)用某個類的方法1. // 調(diào)用Person的Speak方法 method = clazz.getMethod("Speak", int.class, String.class); method.invoke(clazz.newInstance(), 22, "小明"); // Java 反射機制 - 調(diào)用某個類的方法2. // age -> 22. name -> 小明 } public void run(){ System.out.PRintln("調(diào)用Person類的run方法"); } public void Speak(int age, String name){ System.out.println("調(diào)用Person類的Speak方法"); System.out.println("age -> " + age + ". name -> " + name); }}程序運行結(jié)果:
新聞熱點
疑難解答