CDI bean从泛型类扩展而来

时间:2014-12-09 10:50:52

标签: java-ee ejb cdi

我想从这样的通用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?

1 个答案:

答案 0 :(得分:0)

我认为这个警告出现了,因为您的通用DAO已参数化,但DAO的具体实现并未指定参数类型。将类型添加到DAOImpl类声明中,您应该没问题。