如何在特定类型的泛型上调用方法

时间:2013-02-18 20:42:44

标签: java service dao

在下面的服务中,我正在尝试初始化我的Dao并将EntityManager注入其中。我们没有在这个项目中使用spring。我的IDE抱怨调用setEntityManager(),因为它无法识别该对象始终是GenericDao。这是正确的方法吗?

public class GenericService<T, Dao> {

    private static Logger logger = Logger.getLogger(Logger.class.getName());

    protected Dao dao;
    protected EntityManager em;

    public GenericService(Class<Dao> daoClass) {
        try {
            dao = daoClass.newInstance();

            EntityManagerFactory emf = Persistence.createEntityManagerFactory("unit");
            em = emf.createEntityManager();

            dao.setEntityManager(em);

        } catch(InstantiationException e) {
            logger.log(Level.SEVERE, "Unable to initialize DAO: {1}", daoClass.getClass());
        } catch(IllegalAccessException e) {
            logger.log(Level.SEVERE, "Unable to initialize DAO: {1}", daoClass.getClass());
        }
    }
}

1 个答案:

答案 0 :(得分:2)

你可以使用演员:

((GenericDao)dao).setEntityManager(em);

但我想如果你知道它总是一个GenericDao,那么为什么不把它作为那种类型开始,例如。

protected GenericDao dao;

并改变类声明:

public class GenericService<T, GenericDao>