我有一个像这样实现的通用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>

07-24 09:34