【问题标题】:Typed generic DAO and Entity类型化的通用 DAO 和实体
【发布时间】:2011-10-04 09:37:37
【问题描述】:

目前我正在尝试实现a typed generic DAO

我什至不会编译任何东西,因为 NetBeans 抱怨 UserDAOHibernate

此处需要接口
类型参数用户不在类型变量实体的范围内

恐怕我在使用继承/接口方面存在一些明显的错误,因为我对 Java 还很陌生。

这是一些精简的代码

public interface GenericEntity<ID extends Serializable> {
    public abstract ID getId();
    public abstract void setId(final ID id);
}

public abstract class LongEntity implements GenericEntity<Long> {
    protected Long id;
    public Long getId();
    public void setId(final Long id);
}

public class User extends LongEntity implements Serializable {
    private String name;
    private String password;
    private Customer customer;
}

public interface GenericDAO<ENTITY extends GenericEntity<ID>, ID extends Serializable> {
    public abstract ENTITY findById(ID id);
    public abstract List<ENTITY> findAll();
    public abstract ENTITY makePersistent(ENTITY entity);
    public abstract void makeTransient(ENTITY entity);
}

public abstract class GenericHibernateDAO<ENTITY extends GenericEntity<ID>, ID extends Serializable>
        implements GenericDAO<ENTITY, ID> {
}

public class UserDAOHibernate implements GenericHibernateDAO<User, LongEntity> {
}

LongEntity 应该是extend GenericEntity&lt;Long&gt; 吗?如果是这样,我将如何使用 Java 的单级或继承来做到这一点?

这种分层方法是一个不好的例子吗?我所有的实体都需要一个 id,这个实现可以很容易地在以后使用不同的 id 类型重用,所以我想我可以使用它。

【问题讨论】:

  • 旁注:你不必声明接口方法是抽象的(也不是公共的)——它们隐含地是公共的和抽象的。 :)
  • @Thomas 也谢谢。为我节省了几次击键:)

标签: java generics dao


【解决方案1】:

错误来自这里:

public class UserDAOHibernate implements GenericHibernateDAO<User, LongEntity> {
}

您已指定GenericHibernateDAOID 参数化类型以&lt;ID extends Serializable&gt; 为界。

LongEntity 扩展了 GenericEntity,因此,为什么你有一个类型不匹配。

另外,GenericHibernateDAO 是一个抽象类(而不是接口),因此您需要使用extends 而不是implements

正确的解决方案应该是:

public class UserDAOHibernate extends GenericHibernateDAO<User, Long> {
}

【讨论】:

  • 谢谢!关于实现与扩展还有另一个错误:public class UserDAOHibernate extends GenericHibernateDAO&lt;User, Long&gt;
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 2012-09-15
  • 1970-01-01
  • 2021-02-16
  • 2012-09-25
  • 2012-08-31
  • 2012-09-14
  • 1970-01-01
相关资源
最近更新 更多