如何将枚举作为通用参数传递

时间:2014-01-12 02:55:50

标签: java generics parameters enums cdi

我正在基于通过CDI注入的DAO实现REST服务的基本CRUD。 它将使用多次注射,我想从扩展GenericRest的类中传递DAO类型。 我按照本教程。

http://www.javacodegeeks.com/2013/06/java-ee-cdi-programmatic-dependency-disambiguation-example-injection-point-inspection.html

获得可行的代码:

GenericREST.java

public abstract class GenericREST {
    @Inject
    @DAOProducer
    @DAOType(DAO.COMMENT)
    private GenericDAO dao;
    ...
}

GenericDAO.java

public interface GenericDAO<T, PK extends Serializable> {
    public T create(T t);
    public T read(final PK id);
    public T update(T t);
    public void delete(final PK id);
}

当我如上所述设置@DAOType时,它运行良好。 但是我想通过从扩展类传递它的类型来某种程度地选择DAO。

有没有办法呢?或者可能有更简单的方法?

1 个答案:

答案 0 :(得分:1)

假设您使用CDI实例,您可以执行以下操作:

@Inject
@DAOProducer
private Instance<GenericDAO<?,?>> genericDaoInst;

protected GenericDAO<?,?> getDao(DAO dao) {
    return genericDaoInst.select(new DAOTypeLiteral(dao)).get();
}

然后在你的代码的某个地方...

GenericDAO<?,?> dao = getDao(DAO.COMMENT);