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

來源:互聯網
上載者:User

本人在學習動態代理的時候,做了些練習,結果報出了 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。


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


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.