一个蠢问题,记一下,防止下次再犯。
今天把上周写的一个JDK动态代理的demo拿出来重写看了下,然后修改了重写的invoke方法的返回值,结果启动Main方法时就报错ClassCastException。
折腾来折腾去,愣是没找到原因,后面还是把生成的Proxy文件给复制了一份,然后修改Main方法直接调用复制的Proxy类的方法进行debug。
找到原因如下 :代理是将类的所有方法代理了,这个是重点。
所有方法的返回值都是implement InvocationHandler重写的invoke方法的返回值。
也就是说明,这个invoke方法的返回值不能随便写,按规则来就只能是return method.invoke。
当时也是自己傻逼,翻生成的代理类的代码时就认为是重写的问题,结果想着super.toString执行的时候想岔路了,觉得这块没问题,我……下午5点到10点半,5个半小时……