问题解答
一、问题描述二、问题解决三、附加一、问题描述
本人在仿照手写mybatis框架时用到了动态代理如图: 测试运行时报了Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to com.chan.dao.IUserDao
的错二、问题解决
从网上查了些许资料得知:Father.class == new Father().getClass()
,如果是父类指向之类则是:Father.class == new Son().getClass()
我们这个动态代理的第二个参数是要求给与daoInterFaceClass
这个class对象下的所有接口,而我们在外侧是:IUserDao userDao = session.getMapper(IUserDao.class)
,父类接口指向子类实现,导致我们daoInterFaceClass.getInterfaces()
第二个参数返回的结果是接口下的所有接口,令人哭笑不得,真的是一个小坑,特此记录以下,如果我们要改,可以改成这样,传进去就直接是接口了:当然还有很多其它的解决方式,我这只是其中一种罢了,我用你随意