博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于BaseDao使用泛型时出错
阅读量:4097 次
发布时间:2019-05-25

本文共 1472 字,大约阅读时间需要 4 分钟。

 

      我在练手项目中,编写了一个BaseDao(使用泛型)的基本实现类

 

如下代码:

 

 

public class BaseDaoImpl
implements IBaseDao
{ private Class
entityClass; // 构造函数: 1. 获取当前运行类的参数化类型; 2. 获取参数化类型中实际类型的定义(class) public BaseDaoImpl() { entityClass = (Class
) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } public Session getSession() { return HibernateSessionFactory.getSession(); } public void closeSession(){ HibernateSessionFactory.closeSession(); } /* 省略本分代码 */}

      

      但是我在struts2的框架 UserAction里直接使用了如上基本实现类BaseDaoImpl<T>

 

//这就是出错的原因private BaseDao
dao = new BaseDaoImpl
();

 

导致在jsp页面跳转到UserAction就会报 错

java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

 

----------------------------------------------------------------------------------

最后找到问题所在

     原因是我运行时传参,在UserAction使用 BaseDao 的基本实现 BaseDaoImpl<T>时,才确定泛型类型

这样就会出错
      因为 泛型类型 是要在编译时就确定的,如果运行时去设置泛型类型,编译器就会出现类型转换错误


----------------------------------------------------------------------------------
解决办法:
先  编写 接口继承 我的BaseDao,给他指明类型
public interface IUserDao extends BaseDaoImpl<User> {


     /*  省略部分代码 */
    public void add(User user, Integer groupid);
}

 

在 编写上面接口的实现类
public class UseDaoImpl extends BaseDaoImpl<User> implements IUserDao{



     /*  
       这里去实现你的  UserDao
*/
}

----------------------------------------------
      就是要在编译时就确定 BaseDaoImpl<User> 里是类型

java的泛型在编译的时候可以保证,但是运行的时候泛型是会被擦除的。

转载地址:http://qqlii.baihongyu.com/

你可能感兴趣的文章
动态规划法(六)鸡蛋掉落问题(一)
查看>>
LeetCode 887.鸡蛋掉落(C++)
查看>>
奇异值分解(SVD)的原理详解及推导
查看>>
算法数据结构 思维导图学习系列(1)- 数据结构 8种数据结构 数组(Array)链表(Linked List)队列(Queue)栈(Stack)树(Tree)散列表(Hash)堆(Heap)图
查看>>
【机器学习】机器学习系统SysML 阅读表
查看>>
最小费用最大流 修改的dijkstra + Ford-Fulksonff算法
查看>>
最小费用流 Bellman-Ford与Dijkstra 模板
查看>>
实现高性能纠删码引擎 | 纠删码技术详解(下)
查看>>
scala(1)----windows环境下安装scala以及idea开发环境下配置scala
查看>>
zookeeper(3)---zookeeper API的简单使用(增删改查操作)
查看>>
zookeeper(4)---监听器Watcher
查看>>
zookeeper(2)---shell操作
查看>>
mapReduce(3)---入门示例WordCount
查看>>
hbase(3)---shell操作
查看>>
hbase(1)---概述
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
SSM-CRUD(2)---查询
查看>>
SSM-CRUD (3)---查询功能改造
查看>>
Nginx(2)---安装与启动
查看>>