泛型DAO如何为所有不同的DAO实现返回相同的类型?

时间:2012-09-24 08:35:37

标签: java dao jdo datanucleus genericdao

我正在为我的DataNucleus JDO DAO创建通用DAO。通用DAO将执行获取,更新,删除,创建操作和一些其他通用操作,因此这些实现可以在更具体的DAO中进行扩展。

是否有可能以某种方式扩展泛型DAO,并在例如按ID获取对象时返回正确的类型?

User user = userDao.get(userId); // Is this possible when UserDao extends generic DAO ?? userDao should return user of type User instead of object.

2 个答案:

答案 0 :(得分:3)

是的,可以使用泛型来执行此操作:

public abstract class Dao<T> {
    public T get(String id) { ... }

    ...
}

public class UserDao extends Dao<User> {
    ...
}

UserDao userDao = new UserDao();
User user = userDao.get(userId); //Returns a User

根据您的需要,Dao<T>可以是抽象基类,也可以是通用接口(例如public interface IDao<T> { ... }

答案 1 :(得分:1)

你的部分问题已由verdesmarald回答。我想在verdesmarald的代码中添加一个重要的变化

你应该更喜欢组合而不是继承。 UserDao不应该从Dao扩展UserDao,而应该有一个Dao。这样,您的代码将不会绑定到单个实现,并且可以在单元测试期间模拟Dao。