JAVA反射機制基礎:
參考:http://lavasoft.blog.51cto.com/62575/43218/ http://java.ccidnet.com/art/3539/20070924/1222147_1.html
JAVA invoke的調用:
有如下的類
public class ClassA{ private int Method1(String[] strs){ int num=0; for(String str:strs) num++; return num; }}
現在我們需要測試這個類中的Method1方法,按照java的反射機制我們可以用如下代碼運行這個私人方法:
Class ownerClass=ClassA.class;Method method= ownerClass.getDeclaredMethod("Method1");method.setAccessible(true);String[] strs= new String[]{"ssss","bbbb"};ClassA ClassAinstance= new ClassA();method.invoke(ClassAInstance,strs);會產生參數數目不匹配的異常,原因是invoke函數的動態參數匹配,會講strs映射到每一個參數上,而不是一個陣列變數,解決方案:
Class ownerClass=ClassA.class;Method method= ownerClass.getDeclaredMethod("Method1");method.setAccessible(true);String[] strs= new String[]{"ssss","bbbb"};Object[] args=new Object[1];args[0]=strs;ClassA ClassAinstance= new ClassA();method.invoke(ClassAInstance,args);