我有一个像这样实现的通用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接口的接口。
有人可以向我解释为什么这行不通吗?任何帮助将非常感激。
最佳答案
GenericDao<SomeSpecificEntity>
与GenericDao<AbstractEntity>
不同。
相反,您应该允许子类:
GenericDao<? extends AbstractEntity>
您将无法在其上调用任何接受
T
作为参数的方法,因为您不知道T
是什么。或者,可以使整个TableModel类通用,并接受
GenericDao<T>
。