动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题
转:
动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题
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如何来解释这个方法返回值
返回指定接口的实体类
具体为什么不能用实现类来接收 而是要用 接口 我还不是很明白
以上都是个人见解 欢迎讨论
动态代理怎么实现 可以看一下这篇博客 在最后那一块知识
动态代理之: com.sun.proxy.$Proxy0 cannot be cast to 问题的更多相关文章
- 关于利用动态代理手写数据库连接池的异常 java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to java.sql.Connection
代码如下: final Connection conn=pool.remove(0); //利用动态代理改造close方法 Connection proxy= (Connection) Proxy.n ...
- sun.proxy.$Proxy0 cannot be cast to dao.impl.MyAdviceImpl
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); ...
- java 动态代理范例 InvocationHandler与Proxy
java 动态代理范例 InvocationHandler与Proxy,拦截与代理 java.lang.reflect.Proxy,Proxy 提供用于创建动态代理类和实例的静态方法.newProxy ...
- Java中动态代理技术生成的类与原始类的区别 (转)
用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...
- Java中动态代理技术生成的类与原始类的区别
用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...
- Spring AOP 和 动态代理技术
AOP 是什么东西 首先来说 AOP 并不是 Spring 框架的核心技术之一,AOP 全称 Aspect Orient Programming,即面向切面的编程.其要解决的问题就是在不改变源代码的情 ...
- Java提高班(六)反射和动态代理(JDK Proxy和Cglib)
反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...
- JAVA动态代理的全面深层理解
Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过 ...
- Java中动态代理技术生成的类与原始类的区别 (good)
用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后 ...
随机推荐
- Django模板渲染
一 . 语法 # 关于模板渲染只需要记住两种语法就可以: 1.{{ }} # 里面写变量 2.{% %} # 里面写与逻辑相关的,比如for循环 二 . 变量名 在django的模板语言中按照语法: ...
- epoch、 iteration和batchsize区别
转自: https://blog.csdn.net/qq_27923041/article/details/74927398 深度学习中经常看到epoch. iteration和batchsize,下 ...
- RBS SharePoint 2010 Server.wmv
视频地址: https://www.youtube.com/watch?v=DXi2er514iA&feature=youtu.be
- luogu4187
P4187 [USACO18JAN]Stamp Painting 样例 input3 2 2output6 input6 10 5output190 sol:首先可以发现,对于合法的序列,只要有一串至 ...
- python命令里运行正确但是pycharm里面运行就是报错的问题
这两天在学习爬虫,第一步就是 import scrapy class StackOverflowSpider(scrapy.Spider): 结果一直报错,说是scrapy没有spider这个方法,各 ...
- zabbix在ubuntu16.04上的安装
开始安装 zabbix具体安装可以参考官方文档写的很详细,令人高兴的是现在有了中文的版本的翻译,这里简要说下. 上篇文章我写了在ubuntu14.04上安装zabbix,见这里http://www.c ...
- 洛谷P1209修理牛棚题解
题目 这个题一眼看上去是一个贪心,但是一个贪心题就一定要用一个贪心的做法来做吗,为什么不能写一个DP呢,这个题我们可以从他修理牛棚的角度来看,价值就是一个木板可以修几个,但是也同时消耗掉了一个木板的长 ...
- Codeforces379 F. New Year Tree
Codeforces题号:#379F 出处: Codeforces 主要算法:LCA+树的直径 难度:4.4 思路分析: 给出q个操作,每次在一个节点上接上两个叶子.每一次询问树的直径. 暴力做法:每 ...
- 用大O记号法测量算法的效率(Algorithm efficiency Asymptotic notation Big O notation)
为什么要了解算法的效率? 一般来说,编程就是把各种已知的算法代入到自己的代码当中,以此来解决问题.因此,了解各种算法的效率对于我们选择一个合适的算法有很大帮助. 算法的效率由什么确定? 从算法分析的理 ...
- C#常用的命名规则汇总
C#常用的命名规则汇总 来源 https://www.cnblogs.com/pengyouqiang88/p/5021128.html 本文转载自脚本之家 本文详细汇总了C#常用的命名规则.分享给大 ...