我的JPA模型POJO有一些泛型类,如下所示:

public interface Identifiable<PK extends Serializable> {
    PK getUniqueId();
}

public interface GenericDao<T extends Identifiable<PK>> {
    public T findById(PK id);
}

此代码无法编译。为此,我需要指定

public interface GenericDao<T extends Identifiable<PK>, PK extends Serializable> 

但那是多余的信息!! T扩展的事实可识别意味着将为可识别实例指定PK类型,并且这是用于DAO PK的类型。

如何在没有多余信息的情况下完成这项工作?

谢谢,弗雷德


修改:简化示例

有帮助吗?

解决方案

你试过了吗?

public interface WatchableDao<T extends Watchable<?>>

(即它是Watchable<Something>但我不在乎Something是什么)

我没有尝试过,但值得一试。

编辑:发布问题编辑,似乎你确实需要PK作为接口的类型参数。在这种情况下,我相信你必须像你一样有效地重复约束。是的,这是多余的,但我认为它比语言更简单,必须根据其作为其他地方的类型参数来指定适用于PK的有效约束。如果它是任何安慰,在C#中也是如此。

它还使PK的约束仅从界面本身清除,而不是必须查看另一个界面以查看可行的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top