目前我正在尝试实施a typed generic DAO。
我甚至没有编译任何东西,因为NetBeans抱怨UserDAOHibernate
此处预期界面
的范围内
type参数User不在类型变量ENTITY
我担心如何使用继承/接口有一些明显的错误,因为我对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类型中重用,所以我想我可以使用它。
答案 0 :(得分:1)
错误来自:
public class UserDAOHibernate implements GenericHibernateDAO<User, LongEntity> {
}
您已指定GenericHibernateDAO
的{{1}}参数化类型受ID
限制。
<ID extends Serializable>
扩展了LongEntity
,因此导致了类型不匹配的原因。
此外,GenericEntity
是一个抽象类(而非接口),因此您需要GenericHibernateDAO
而不是extends
。
正确的解决方案应该是:
implements