简体   繁体   English

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

[英]How to pass enum as generic parameter

I'm implementing basic CRUD for REST service based on DAO injected via CDI. 我正在基于通过CDI注入的DAO为REST服务实现基本的CRUD。 It's gonna work with multiple injections and I wanna pass the type of DAO from class that extends GenericRest . 它可以使用多次注入,我想从扩展GenericRest类中传递DAO类型。 I followed this tutorial. 我遵循了本教程。

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

And get workable code: 并获取可行的代码:

GenericREST.java GenericREST.java

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

GenericDAO.java 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);
}

It works well when I'm setting @DAOType as described above. 如上所述,当我设置@DAOType时,它可以很好地工作。 But I wanna somehow select DAO by passing its' type from extended class. 但是我想通过扩展类的DAO类型来选择DAO。

Is there any way of doing it? 有什么办法吗? Or maybe there is much easier way? 还是有更简单的方法?

Assuming you use CDI instances, you can do something like this: 假设您使用CDI实例,则可以执行以下操作:

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

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

then somewhere in your code... 然后在代码中的某处...

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM