欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题

发布时间:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 

转:

动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题

2018年05月13日 00:40:32 codingCoge 阅读数:1211 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38409944/article/details/80296354 Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to Father.FatherInter at Father.Main.main(Main.java:13)
  • 1
  • 2

不知道写动态代理的时候 你们有没有被这个问题困扰过
反正我是有的 不过和网上的问题不一样

Google很多 答案都是 因为被代理的类没有继承接口 而是继承了一个基类

问:为什么动态代理必须针对接口?
**答:**JDK动态代理的原理是根据定义好的规则,用传入的接口创建一个新类,这就是为什么采用动态代理时为什么只能用接口引用指向代理,而不能用传入的类引用执行动态类。(摘自网络 自己没有看源码)

我的 问题 则是因为

Son s = (Son)Proxy.newProxyInstance(si.getClass().getClassLoader(), si.getClass().getInterfaces(), m);
  • 1

在我这里 Son是实现接口的实现类 这个时候就GG了

正解是

FatherInter s = (FatherInter)Proxy.newProxyInstance(si.getClass().getClassLoader(), si.getClass().getInterfaces(), m);
  • 1

在我这里 FatherInter是那个被实现的接口

两者唯一区别就是 Proxy.newProxyInstance返回的是接口类型 而我 却用实现类来接受 就出现了类型不匹配的问题

来看一下 官方API如何来解释这个方法返回值

返回指定接口的实体类
具体为什么不能用实现类来接收 而是要用 接口 我还不是很明白
以上都是个人见解 欢迎讨论

动态代理怎么实现 可以看一下这篇博客 在最后那一块知识

转载于:https://www.cnblogs.com/libin6505/p/10705749.html

总结

以上是生活随笔为你收集整理的动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。