0

我的 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 扩展 Identifiable 的事实意味着将为 Identifiable 实例指定一个 PK 类型,并且这是用于 DAO 的 PK 的类型。

我怎样才能在没有多余信息的情况下完成这项工作?

谢谢,弗雷德


编辑:简化示例

4

1 回答 1

2

你有没有尝试过:

public interface WatchableDao<T extends Watchable<?>>

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

我没试过,但值得一试。

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

它还使 PK 的限制仅从接口本身就清楚了,而不必查看另一个接口来查看可行的方法。

于 2008-10-31T07:20:30.043 回答