運用反射時報錯java.lang.NoSuchMethodException,以解決,記錄一下


問題:想調用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM