自引用实体的通用签名?
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> {
}
我为指定类型的子实体定义了一个接口。
// 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> {
}