【问题标题】:Generic type as a constructor parameter泛型类型作为构造函数参数
【发布时间】:2013-12-13 18:34:15
【问题描述】:

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

有人可以向我解释为什么这不起作用吗?任何帮助将不胜感激。

【问题讨论】:

    标签: java hibernate generics dao


    【解决方案1】:

    GenericDao&lt;SomeSpecificEntity&gt;GenericDao&lt;AbstractEntity&gt; 不同。

    相反,您应该允许子类:

    GenericDao<? extends AbstractEntity> 
    

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

    或者,您可以将整个 TableModel 类设为通用,并接受 GenericDao&lt;T&gt;

    【讨论】:

    • 谢谢,它有效!我按照你的建议使用了 GenericDao
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    相关资源
    最近更新 更多