开发者社区> 问答> 正文

basedao中如何获得pojo实体类型?报错



这是basedao。




这是baseservice。



controller里面直接调用baseservice。

保存实体是可以通过的,拿实体的时候需要实体类型,拿不到会报错。


还望高手指教,多谢了

展开
收起
爱吃鱼的程序员 2020-06-14 18:40:48 601 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    Java中的泛型是擦除发实现的。T在运行期是不存在实际对应的类型的。所以会出错。有两中方法来解决。

    一个就是base类中传入实体类的Class

    第二个是一个空的AppleDao继承baseDao<Apple>,这种方式。因为泛型类会编译进字节码文件中。你上面拿到的是T,我这里就可以拿到Apples实体类Class

    还有dao必须是每个实体类对应一个,不要共享一个实例类,不然线程不安全的

    引用来自“xdev”的评论

    Java中的泛型是擦除发实现的。T在运行期是不存在实际对应的类型的。所以会出错。有两中方法来解决。

    一个就是base类中传入实体类的Class

    第二个是一个空的AppleDao继承baseDao<Apple>,这种方式。因为泛型类会编译进字节码文件中。你上面拿到的是T,我这里就可以拿到Apples实体类Class

    还有dao必须是每个实体类对应一个,不要共享一个实例类,不然线程不安全的

    使用泛型

    http://git.oschina.net/alexgaoyh/alexgaoyh/blob/master/src/main/java/com/alexgaoyh/common/dao/impl/BaseDaoImpl.java

    我也写了个baseservice,不过换了种方式,在baseservice里面有一个虚拟的方法getDao(),baseService里面用类似getDao().save()的方式,然后继承baseservice的时候实现getDao()方法把业务Dao放进去

    引用来自“alexgaoyh”的评论

    使用泛型

    http://git.oschina.net/alexgaoyh/alexgaoyh/blob/master/src/main/java/com/alexgaoyh/common/dao/impl/BaseDaoImpl.java

    引用来自“cjava”的评论

    我也写了个baseservice,不过换了种方式,在baseservice里面有一个虚拟的方法getDao(),baseService里面用类似getDao().save()的方式,然后继承baseservice的时候实现getDao()方法把业务Dao放进去
    2020-06-14 18:41:07
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载