0
public class JobAssetService extends GenericService<JobAssetService, JobAsset, JobAssetDao> {

}

我正在尝试为我的服务层提供通用的 save() 功能,但它似乎不喜欢我传递给dao.save(). 这似乎应该工作......

需要不兼容的类型:M 找到:java.lang.object

public class GenericService<T, M, Dao extends GenericDao> {

    protected Dao dao;
    protected EntityManager em;

    public GenericService() {

    }

    //map the dao/entity manager when instantiated
    public GenericService(Class<Dao> daoClass) {
        //map entity manager & dao
        //code removed for readability
    }

    public M save(M entity) {
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        entity = dao.save(entity); //IntelliJ complains about this
        tx.commit();

        return entity;
    }
}
4

2 回答 2

1

在 IntellijIDEA 中,您可以将光标放在错误上,然后使用 ALT + ENTER 并且 Intellij 可能会建议您转换结果

dao.save(entity)

作为“M”

entity = (M) dao.save(entity); 
于 2013-02-18T21:46:03.457 回答
1

你也应该GenericDao使用泛型:

class GenericDao<M> {
    public M save(M entity) {
        ...
    }
}

然后按如下方式扩展您的通用服务:

public class GenericService<T, M, Dao extends GenericDao<M>> {
于 2013-02-18T21:49:25.177 回答