gpt4 book ai didi

java - 泛型可以吗?

转载 作者:行者123 更新时间:2023-12-01 15:44:24 26 4
gpt4 key购买 nike

我有课:

public class GenericDAO<T, ID extends Serializable> {
private final EntityManager em;
private final Class<T> entityClass;
public GenericDAO(EntityManager em) {
this.em = em;
ParameterizedType genericSuperClass = (ParameterizedType) getClass().getGenericSuperclass();
this.entityClass = (Class<T>) genericSuperClass.getActualTypeArguments()[0];
}
}

如果我扩展这个类,一切都会正常。现在我想直接使用这个类(参见下面的代码,CRUDBean 是 CRUDService 的实现) - 有必要重写构造函数来获取特定的类。

@Remote(CRUDService.class)
@Stateless
public class CRUDBean<T extends EntityBase> implements CRUDService<T> {
@PersistenceContext
private EntityManager entityManager;

@Override
public long size(String whereClause, Map<String, Object> whereParameters) {
return new GenericDAO<T, Long>(entityManager).size(whereClause, whereParameters);
}
}

如何编写这样的泛型服务?

最佳答案

是的,您需要创建一个单独的构造函数。

您当前的构造函数假定 thisGenericDAO 子类的实例,并且它使用该事实通过 getClass( ).getGenericSuperclass().getActualTypeArguments().

要直接使用 GenericDAO,您应该创建一个 GenericDAO 构造函数,它将实体类(无论 T 类型是什么)作为参数。然后在 CRUDBean.size() 中或任何需要实例化 GenericDAO 的地方提供实体类。

如果 CRUDBean 中没有可用的实际类,则有以下三种选择:

  1. 创建一个以实体类作为参数的 CRUDBean 构造函数。
  2. size() 添加一个参数,该参数将实体类作为参数。
  3. 使用与当前 GenericDAO 构造函数中相同的技巧来获取它,但使用 getGenericInterfaces() 代替。

关于java - 泛型可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7384601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com