天天看點

java class 轉 type_java.lang.Class不能轉換為java.lang.reflect.ParameterizedType

我長久以來一直堅持這個問題.我搜尋了這個問題有一段時間,但沒有一個解決方案工作.

結構體:

public interface GenericDAO

@Repository

public class AbstractGenericDAO

implements GenericDAO {

private Class persistentClass;

@Autowired

private SessionFactory sessionFactory;

static Logger LOGGER = Logger.getLogger(AbstractGenericDAO.class);

@SuppressWarnings("unchecked")

public AbstractGenericDAO() {

this.persistentClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

}

@SuppressWarnings("unchecked")

public T saveEntity(T entity) throws DBException {

return saveEntity(entity, false);

}

@SuppressWarnings("unchecked")

public T saveEntity(T entity, boolean explicitFlush) throws DBException {

Session session = getSessionFactory().getCurrentSession();

try {

session.save(entity);

if(explicitFlush) {

session.flush();

session.refresh(entity);

}

} catch (HibernateException he) {

String errorMsg = "Could not save entity. Reason: " + he.getMessage();

LOGGER.error(errorMsg, he);

throw new DBException(errorMsg, he);

}

return entity;

}

@SuppressWarnings("unchecked")

public Class getPersistentClass() {

return persistentClass;

}

public SessionFactory getSessionFactory() {

return this.sessionFactory;

}

@Autowired

public void setSessionFactory(SessionFactory sessionFactory) {

this.sessionFactory = sessionFactory;

}

}

public interface ShlkActiveWorkflowDAO

extends GenericDAO

@Repository

public class ShlkActiveWorkflowDAOImpl

extends AbstractGenericDAO

implements ShlkActiveWorkflowDAO

我也使用< context:component-scan>在我的application-config.xml中

< tx:注釋驅動/>在我的application-config.xml中.

請提供有關如何解決此問題的一些資訊.

Exception:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'abstractGenericDAO'

Constructor threw exception; nested exception is java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:946)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:890)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)

at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416)

at com.coral.spring.Launcher.(Launcher.java:95)

at com.coral.spring.Launcher.main(Launcher.java:56)

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.workflow.dao.AbstractGenericDAO]: Constructor threw exception; nested exception is

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

at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141)

at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:72)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:938)

... 12 more

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

at com.workflow.dao.AbstractGenericDAO.(AbstractGenericDAO.java:43)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)

... 14 more