問題:想調用service類中的私有方法時, Method target=clz.getMethod("say", String.class);用Class的getMethod報錯Java.lang.NoSuchMethodException。
解決方案:查了下Class的文檔,該類下原來有兩個方法:getMethod,
。看了下說明大概的意思就是getDeclaredMethod
getMethod
只能調用public聲明的方法,而getDeclaredMethod基本可以調用任何類型聲明的方法
調用詳細代碼:
public class Client5 {
@SuppressWarnings("unused")
private String say(String content){
return "hi,"+content;
}
public String show(String content){
return "hi,"+content;
}
}
public class Client4 {
public static void main(String args[]) throws Exception{
Class<Client5> clz=Client5.class;
Client5 obj=(Client5)clz.newInstance();
Method target=clz.getDeclaredMethod("say", String.class);
target.setAccessible(true);
System.out.println(target.invoke(obj, "I am Caomr"));
}
}
筆記:以后用放射多用
,盡量少用getDeclaredMethod
getMethod
。