我有一个像这样实现的泛型dao接口:
public interface GenericDao<T extends AbstractEntity>
和 AbstractHibernateDao类:
public abstract class AbstractHibernateDao<T extends AbstractEntity> implements GenericDao<T>
我正在尝试像这样制作通用表模型:
public class EntityTableModel extends DefaultTableModel {
private GenericDao<AbstractEntity> dao;
public EntityTableModel(GenericDao<AbstractEntity> dao, String[] columnLabels) {
super(columnLabels, 0);
this.dao = dao;
}
我尝试传递参数的方式如下所示:
table.setModel(new EntityTableModel(new SomeEntityHibernateDao(),columns));enter code here
SomeEntityHibernateDao 的代码如下所示:
public class SomeEntityHibernateDao extends AbstractHibernateDao<SomeEntity> implements
SomeEntityDao
SomeEntity扩展了AbstractEntity,SomeEntityDao是扩展GenericDao接口的接口。
有人可以向我解释为什么这不起作用?任何帮助都会非常感激。
答案 0 :(得分:2)
GenericDao<SomeSpecificEntity>
与GenericDao<AbstractEntity>
不同。
相反,您应该允许子类:
GenericDao<? extends AbstractEntity>
您将无法调用接受T
作为参数的任何方法,因为您不知道T
是什么。
或者,您可以使整个TableModel类具有通用性,并接受GenericDao<T>
。