我想从这样的通用DAO扩展DAO:
public abstract class DAO<T> implements Serializable{
private Class<T> entityClass;
public DAO(){
}
public void setClass(Class<T> entityClass){
this.entityClass=entityClass;
}
protected abstract EntityManager getEntityManager();
和从泛型类扩展并在EJB中注入的CDI bean
@Named("daoImpl")
@RequestScoped
public class DAOImpl extends DAO implements Serializable{
@PersistenceContext(unitName = "pruebaEJBPU")
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public DAOImpl() {
setClass(User.class);
}
我必须使用setClass方法,因为我想在EJB中注入这个bean而且它不能有一个arg构造函数。
这种方式有效,但它会抛出一个我无法避免的警告:警告:检测到以下警告:警告:java.lang.Class类型的参数1来自public void p1.dao.setClase(java.lang) .Class)无法解析为具体类型。
是否有另一种方法可以从泛型类扩展CDI bean或避免警告?如果我使用像Netbeans这样的EJB,一切都很好,但我不想将EJB用于DAO。如果我不使用CDI bean,我如何在EJB中注入一个简单的DAO?
答案 0 :(得分:0)
我认为这个警告出现了,因为您的通用DAO已参数化,但DAO的具体实现并未指定参数类型。将类型添加到DAOImpl类声明中,您应该没问题。