- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
目前 VariableService
在我的 Controller 中是 @Autowired
。
我知道我可以实现类 ParameterizedType
来消除这个错误,但我担心我可能会走错方向。有没有更好的方法来做到这一点,还是我需要硬着头皮实现 ParameterizedType
的方法?
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contentController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.fettergroup.cmt.service.VariableService com.fettergroup.cmt.web.ContentController.variableService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'variableService' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.fettergroup.cmt.service.VariableService]: Constructor threw exception; nested exception is java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
可变服务
public class VariableService extends EntityService {
public VariableService () {
super.setEntityRepository(new VariableRepository());
}
}
实体服务
public abstract class EntityService<T> {
public EntityRepository<T> entityRepository;
public T create(T entity) {
return entityRepository.create(entity);
}
public T update(T entity) {
return entityRepository.update(entity);
}
public void delete(T entity) {
entityRepository.delete(entity);
}
public void setEntityRepository(EntityRepository<T> entityRepository) {
this.entityRepository = entityRepository;
}
}
变量存储库
public class VariableRepository extends EntityRepository {
}
实体库
@Repository
public abstract class EntityRepository<T> {
//the equivalent of User.class
protected Class<T> entityClass;
@PersistenceContext(type= PersistenceContextType.TRANSACTION)
public EntityManager entityManager;
public EntityRepository () {
//Get "T" and assign it to this.entityClass
ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
this.entityClass = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
}
/**
* Create this entity
* @param t
* @return
*/
public T create(T t) {
entityManager.persist(t);
return t;
}
/**
* Update this entity
* @param t
* @return
*/
public T update(T t) {
return entityManager.merge(t);
}
/**
* Delete this entity
* @param entity
*/
public void delete(T t) {
t = this.update(t);
entityManager.remove(t);
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
}
最佳答案
只是说,这是一个非常糟糕的确定实体类型的设计。您应该执行以下操作,而不是依靠反射来推断其类定义。它不仅会消除该错误,而且总体上会更干净,在低级别上比反射更快(并不是说它真的会成为问题)。
@Repository
public abstract class EntityRepository<T>{
protected Class<T> entityClass;
public EntityRepository(Class<T> entityClass){
this.entityClass = entityClass;
}
//...
}
public class UserEntityRepository extends EntityRepository<User>{
public UserEntityRepository(){
super(User.class);
}
}
关于java - 无法将类转换为 java.lang.reflect.ParameterizedType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10589767/
给出下面的代码片段,对于 POJO 类的每个字段,有没有办法检查类型是否是整数列表?这里真正的问题是类型参数,因为通过 instanceof 或 isAssignableFrom 很容易检查它是否是一
public class FrontUtil { public List> tableGen(List> theads, List tbodys){ List> frontLi
我无法完全理解反射的工作原理,因此在尝试为我的 GsonBuilder 注册自定义类型适配器时遇到了一些麻烦。 . 我需要为 List 注册类型适配器类型。 这是一个工作代码: gsonBui
考虑这个类结构。 class Class1 { Class2 field1; } 如果我有一个 ParameterizedType代表 Class1 的实例通过反射,我如何获取/创建 Para
我正在从 Field.getGenericType() 中检索一个 ParameterizedType 对象,我想创建该类型的一个实例。例如,此类型可能代表一个 HashMap。 我想也许我可以将它转
阅读 ParameterizedType 的文档后interface 我认为 ParameterizedType 实例的示例可以是任何参数化类型,例如我代码中的 col: public class
我尝试这个通用代码是因为我不想为数据库中的每个实体都创建一个 Dao 类,因为我有 80 个专门用于那些我将只执行 CRUD 查询的人。因为在大多数情况下,我只需要坚持或通过 id 进行查找。 pub
有用的是,scala 的 Universe.typeOf 保留了类的类型参数。 import scala.reflect.runtime.universe._ case class X[T:TypeT
由于错误,给定的断言将失败 Failed to find the generated JsonAdapter constructor for class GenericType 如何从具体化的类型中获
我有以下代码。在运行时 typeClassz 是 java.util.Set。但是 typeClassz instanceof ParameterizedType 的计算结果为 false。对于 ja
我正在尝试实现这样的模型结构: Generic (abstract) TplInsurance (extends Generic) TplInsuranceDoctor (nested class i
假设我有一个Type a这是 java.util.TreeSet ,已通过泛型参数化,由于类型删除,我们看不到。我们还有一个Type b ,这是一个“java.lang.Integer”。如何构建 P
如果我有一个无法更改的接口(interface)和类,看起来像这样: public interface ISport { String getName(); List ge
我想使用新的 JPA 2.1 功能来创建自定义通用枚举转换器。但在部署时我收到此错误:Caused by: org.hibernate.AssertionFailure: Could not extr
目前 VariableService 在我的 Controller 中是 @Autowired。 我知道我可以实现类 ParameterizedType 来消除这个错误,但我担心我可能会走错方向。有没
我有一个简单的静态方法: public static U findStuff(String id) { // how can i get the class of type U here ?
我已经在 Stack 上寻找了一段时间的答案。所有的答案看起来都好像他们说我已经有了正确的答案,但我仍然在下面的构造函数的第一行收到类强制转换异常。 SEVERE: Exception while l
给定一个注入(inject)器,我想知道如何检索某个参数化类型的特定实例(但我没有 Type 本身)。让我解释一下: 假设您进行了以下绑定(bind): List绑定(bind)到 ArrayList
调用 java.lang.reflect.Type.toString() 提供了非常好的通用类型表示: @Test public void typeToStringWithTypeToken() {
我被这个问题困扰了很长时间。我搜索了这个问题一段时间,但没有一个解决方案有效。 结构: public interface GenericDAO @Repository public class Abs
我是一名优秀的程序员,十分优秀!