自引用实体的通用签名?

A generic signature for self referencing entity?

我为指定类型的子实体定义了一个接口。

// a child of T
interface IChildEntity<T> {
    T getParent();
}

现在我正在尝试为自引用实体定义一个接口。

首选这些定义中的哪一个?

interface ISelfReferencingEntity<T extends ISelfReferencingEntity<T>>
        extends IChildEntity<T> {
}
interface ISelfReferencingEntity<T extends ISelfReferencingEntity<T> & IChildEntity<T>>
        extends IChildEntity<T> {
}

这是一个实际的实体class适用。

class Category implements ISelfReferencingEntity<Category> {

    @ManyToOne
    private Category parent;
}

最初的顾虑是 & IChildEntity<T> 部分与 extends IChildEntity<T> 一起添加是否多余。

T extends ISelfReferencingEntity<T> 意味着 T extends IChildEntity<T> 因为 ISelfReferencingEntity<T>IChildEntity<T> 的子类型。因此,将 & IChildEntity<T> 添加到 T extends ISelfReferencingEntity<T> 是多余的。

首选以下定义:

interface ISelfReferencingEntity<T extends ISelfReferencingEntity<T>>
        extends IChildEntity<T> {
}