动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题
2024-10-16 13:45:46
转:
动态代理之: 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如何来解释这个方法返回值
返回指定接口的实体类
具体为什么不能用实现类来接收 而是要用 接口 我还不是很明白
以上都是个人见解 欢迎讨论
动态代理怎么实现 可以看一下这篇博客 在最后那一块知识
最新文章
- 巧用location.hash保存页面状态
- CSS Sticky Footer
- SQL 递归
- Eclipse 无线调试(利用ADB工具)
- 关于js事件委托
- GPUImage滤镜之自然饱和度
- 关于Assets.car素材问题
- Linux下软件包的多种安装方式
- 分布式发布订阅消息系统 Kafka 架构设计
- qml实现窗口拖动
- 通过jQuery或ScriptManager以Ajax方式访问服务
- ASP.NET最常用的页面生命周期事件
- clearfix:after 清除css浮动
- python数据类型之元组类型
- Fusebox 类似WEBPACK 的工具,React Studio
- 快速解决PHP调用Word组件DCOM权限的问题
- 二维指针的malloc内存分配(转)
- chrome历史记录,浏览记录,全选问题.
- Centos下修改hostname
- Centos7中安装Docker
热门文章
- EXAMPLE FOR PEEWEE 多姿势使用 PEEWEE
- 莫烦theano学习自修第六天【回归】
- 在文件保存中 os.getcwd() os.listdir() os.makedirs() os.mkdir() xx.join() ... 等函数 的使用介绍
- Ubuntu16.04网络不能访问解决办法
- asp.net—WebApi跨域
- Modeling Filters and Whitening Filters
- sws_getContext函数参数介绍
- 【题解】Hanoi
- Codeforces Round #475 Div. 1
- Redis——redis使用redis-dump,redis-load导出导入数据——【三】