转:

动态代理之: 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如何来解释这个方法返回值

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

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

最新文章

  1. 巧用location.hash保存页面状态
  2. CSS Sticky Footer
  3. SQL 递归
  4. Eclipse 无线调试(利用ADB工具)
  5. 关于js事件委托
  6. GPUImage滤镜之自然饱和度
  7. 关于Assets.car素材问题
  8. Linux下软件包的多种安装方式
  9. 分布式发布订阅消息系统 Kafka 架构设计
  10. qml实现窗口拖动
  11. 通过jQuery或ScriptManager以Ajax方式访问服务
  12. ASP.NET最常用的页面生命周期事件
  13. clearfix:after 清除css浮动
  14. python数据类型之元组类型
  15. Fusebox 类似WEBPACK 的工具,React Studio
  16. 快速解决PHP调用Word组件DCOM权限的问题
  17. 二维指针的malloc内存分配(转)
  18. chrome历史记录,浏览记录,全选问题.
  19. Centos下修改hostname
  20. Centos7中安装Docker

热门文章

  1. EXAMPLE FOR PEEWEE 多姿势使用 PEEWEE
  2. 莫烦theano学习自修第六天【回归】
  3. 在文件保存中 os.getcwd() os.listdir() os.makedirs() os.mkdir() xx.join() ... 等函数 的使用介绍
  4. Ubuntu16.04网络不能访问解决办法
  5. asp.net—WebApi跨域
  6. Modeling Filters and Whitening Filters
  7. sws_getContext函数参数介绍
  8. 【题解】Hanoi
  9. Codeforces Round #475 Div. 1
  10. Redis——redis使用redis-dump,redis-load导出导入数据——【三】