1. 程式人生 > >動態代理異常com.sun.proxy.$Proxy0 cannot be cast to

動態代理異常com.sun.proxy.$Proxy0 cannot be cast to

本人在學習動態代理的時候,做了些練習,結果報出了 Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to異常;

與網上其他人寫的例子進行仔細對照,發現了原來


改回來後就執行成功了。


特意在網上查了一下,發現自己的知識點還是比較薄弱,同時也手動測試了自己的一些猜想,如下
Work.class == new Work().getClass() 是相等的,所以同理可得:Work.class.getClassLoader() == new Work().getClass().getClassLoader() 也相等
然而,有一個坑就是我上圖片寫的 Work work = new Hello();    
這裡 System.out.println(work.getClass.getName(),輸出為 "Hello";
以前一直以為父類指向子類或“強轉”後例項的型別是會轉變的,但測試後發現Class並沒有變化,所以我猜測型別是不會變的。
本人以為 new Work().getClass()是Work的Class物件,殊不知獲得的是子類Hello的Class物件。


回到主題:這次出現異常的主要原因不是方法的第一個引數出現問題,而是第二個引數!
Class.getInterfaces() 主要作用是獲取某類所實現的介面所有介面,返回值Class<?>[] ,而我。。。哈哈竟然是獲取介面的介面,所以出錯了,有興趣的朋友可以遍歷輸出所有介面的Class。

另外,我在上網查問題的時候也發現了一個朋友遇到過同樣的異常,但他的異常原因是:代理類沒有實現介面,而是實現了某一基類。大家要注意了哦。