我正在为我的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.
答案 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。