通用类型作为构造函数参数

时间:2013-12-13 18:34:16

标签: java hibernate generics dao

我有一个像这样实现的泛型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接口的接口。

有人可以向我解释为什么这不起作用?任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

GenericDao<SomeSpecificEntity>GenericDao<AbstractEntity>不同。

相反,您应该允许子类:

GenericDao<? extends AbstractEntity> 

您将无法调用接受T作为参数的任何方法,因为您不知道T是什么。

或者,您可以使整个TableModel类具有通用性,并接受GenericDao<T>