【发布时间】: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<Long> 吗?如果是这样,我将如何使用 Java 的单级或继承来做到这一点?
这种分层方法是一个不好的例子吗?我所有的实体都需要一个 id,这个实现可以很容易地在以后使用不同的 id 类型重用,所以我想我可以使用它。
【问题讨论】:
-
旁注:你不必声明接口方法是抽象的(也不是公共的)——它们隐含地是公共的和抽象的。 :)
-
@Thomas 也谢谢。为我节省了几次击键:)