类型转换错误解决方案reflect.ParameterizedType

今天写CRM项目时,在最后抽取BaseDao时,居然无法通过,TMD看见教程上老师也是这样写的就是没报错,我的就报错,感觉郁闷至极,错误如下:

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

报错代码如下:
@Repository("baseDao")
public class BaseDaoImpl<T> implements BaseDao<T>{

	@Resource(name="hibernateTemplate")
	private HibernateTemplate hibernateTemplate;

	private Class clazz;
	//构造方法
	public BaseDaoImpl() {
		//1.得到当前运行类的class对象
		Class cs = this.getClass();
		//2.得到运行类的父类的参数化类型
		Type type = cs.getGenericSuperclass();
		//把ptype转换成Type的子接口类型
	        ParameterizedType ptype=(ParameterizedType) type;
		//3.得到实际类型参数
		Type[] types = ptype.getActualTypeArguments();
		//4.把types变成其实现类Class
		Class classImpl =(Class) types[0];
		this.clazz=classImpl;
		}
	}

	@Override
	public void save(T t) {

		hibernateTemplate.save(t);
	}

	@Override
	public void delete(T t) {
	 	hibernateTemplate.delete(t);
	}

	@Override
	public void update(T t) {
		 hibernateTemplate.update(t);

	}

	@Override
	public List<T> findAll() {

		return (List<T>) hibernateTemplate.find("select new "+clazz.getSimpleName()+"(cust_id,cust_name) from "+clazz.getSimpleName());
	}

	@Override
	public T findOne(int id) {

		return (T) hibernateTemplate.load(clazz, id);

  

经过网上大量搜索,几乎没有什么靠谱答案,后来我觉得既然是多态,那就先判断一下试试,哈哈哈,最后终于成功了.

下面这是经过修改后的代码,稳一笔

@Repository("baseDao")
public class BaseDaoImpl<T> implements BaseDao<T>{

	@Resource(name="hibernateTemplate")
	private HibernateTemplate hibernateTemplate;

	private Class clazz;
	//构造方法
	public BaseDaoImpl() {
		 //1.得到当前运行类的class对象
		Class cs = this.getClass();
		//2.得到运行类的父类的参数化类型
		Type type = cs.getGenericSuperclass();
		//把ptype转换成Type的子接口类型
		if (type instanceof ParameterizedType) {

			ParameterizedType ptype=(ParameterizedType) type;
			//3.得到实际类型参数
			Type[] types = ptype.getActualTypeArguments();
			//4.把types变成其实现类Class
			Class classImpl =(Class) types[0];
			this.clazz=classImpl;
		}
	}

	@Override
	public void save(T t) {

		hibernateTemplate.save(t);
	}

	@Override
	public void delete(T t) {
	 	hibernateTemplate.delete(t);
	}

	@Override
	public void update(T t) {
		 hibernateTemplate.update(t);

	}

	@Override
	public List<T> findAll() {

		return (List<T>) hibernateTemplate.find("select new "+clazz.getSimpleName()+"(cust_id,cust_name) from "+clazz.getSimpleName());
	}

	@Override
	public T findOne(int id) {

		return (T) hibernateTemplate.load(clazz, id);
	}

  

原文地址:https://www.cnblogs.com/weolwy/p/9256067.html

时间: 2024-10-11 19:18:23

类型转换错误解决方案reflect.ParameterizedType的相关文章

错误/异常:java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType 的解决方法

1.错误/异常视图 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseDao' defined in class path resource [spring/beans_common.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInsta

记一次EFCore类型转换错误及解决方案

一  背景 今天在使用EntityFrameworkCore 查询的时候在调试的时候总是提示如下错误:Unable to cast object of type 'System.Data.SqlTypes.SqlString' to type 'System.Data.SqlTypes.SqlGuid' 第一次看这个报错肯定是数据库实体和EFCore中定义的某种类型不匹配从而导致类型转换错误,但是业务涉及到这么多的实体Entity,那么到底是哪里类型无法匹配呢?所以第一步肯定是调试代码,然后看报

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

DAO层有很多操作其实可以用范式加反射来实现的,所以我就开始构想我的万金油BaseDAO了. BaseHibernateDaoAdvance.java public class BaseHibernateDaoAdvance<T extends ModifyInfoEntity, PK extends Serializable, DTO extends BaseDto> extends HibernateDaoSupport implements BaseDaoAdvance<T, PK

利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)

想利用泛型抽取BaseDao层,简化操作时出现问题: @Transactional这个注解是可以继承的,于是就想写在抽取的BaseDao层上,让实现的类可以不用写@Transactional,就可开启事务. 问题描述: 由于偷懒,没给BaseDao抽接口,代码如下: package com.liang.ssh2.base; import java.lang.reflect.ParameterizedType; import java.util.Collections; import java.u

Exception:java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

最近开始着手做一个项目,项目环境用的是spring4.2,struts2.3.1,hibernate4.3.0....一切都配置正常,所有的POJO类都布置好.service层和dao层也抽取了,可是在测试的时候,竟然报以一个错误 ,java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType,,,调试了好久,都没有找出方法,后来看了woshisap大神的博客

Unsupported major.minor version 51.0 错误解决方案

Unsupported major.minor version 51.0 错误解决方案 栏目:Eclipse大师 作者:admin 日期:2015-04-08 评论:0 点击: 13,299 次 jdk1.6工程中使用外部jar包中类出现:Unsupported major.minor version 51.0原因分析:出现上述错误是因为:外部jar包使用jdk1.7(jdk7)编译,而使用此jar包的工程jdk版本为jdk1.6(jdk6),算是版本不支持. 解决方法见下面的步骤: 第一步:在

Git在开发android系统时常用的技巧及常见错误解决方案

Git常用的技巧及常见错误解决方案 项目管理工作 repo 常用命令 ==目标== 了解repo工作原理及常用的repo命令 Git 日常使用的命令,常见问题及解决方案 ==关键词== Repo , Git ==工作指南== == <big>Repo</big> == Android代码其实是由若干个git 工作组织在一起的,repo 是一个便于整体管理这些项目的脚本. 拉代码时需要用到几个步骤,分别对几个步骤进行阐述一下,网上有很多repo 的使用方法,但是对其工作原理描述的并不

Android Studio上Session &#39;app&#39;: Error Installing APK错误解决方案

我在使用Android Studio的时候,使用自己的魅族(M5 Note)真机调试,运行不成功,提示下面图片中的错误(Session 'app':Error Installing APK). 再经过测试过好几种网上的方法之后,特记录如下,望以后大家少走弯路,希望可以帮助到大家. 可能不同的人使用到的方法都会是下面的不同的方法: 1)连接手机之后,会有显示手机的SDK型号以及API的版本,显示我自己的是魅族M5 Note(Android 6,API23),在我的手机上安装不上,刚开始有人说魅族手

Nginx502,504和499错误解决方案

499错误解决方案 499错误是什么?让我们看看NGINX的源码中的定义: ngx_string(ngx_http_error_495_page), /* 495, https certificate error */ ngx_string(ngx_http_error_496_page), /* 496, https no certificate */ ngx_string(ngx_http_error_497_page), /* 497, http to https */ ngx_strin