动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题
生活随笔
收集整理的这篇文章主要介绍了
动态代理之: 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 问题的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: QT QTransform与QMatri
- 下一篇: 洛谷P1067 多项式输出