I defined an interface for a child entities of a specified type.
// a child of T
interface IChildEntity<T> {
T getParent();
}
Now I'm trying to define an interface for self-referencing entities.
Which one of these definitions is preferred?
interface ISelfReferencingEntity<T extends ISelfReferencingEntity<T>>
extends IChildEntity<T> {
}
interface ISelfReferencingEntity<T extends ISelfReferencingEntity<T> & IChildEntity<T>>
extends IChildEntity<T> {
}
Here comes an actual entity class applicable.
class Category implements ISelfReferencingEntity<Category> {
@ManyToOne
private Category parent;
}
The original concern is whether adding & IChildEntity<T>
part along with extends IChildEntity<T>
is redundant or not.
T extends ISelfReferencingEntity<T>
implies T extends IChildEntity<T>
since ISelfReferencingEntity<T>
is a subtype of IChildEntity<T>
. Therefore, adding & IChildEntity<T>
to T extends ISelfReferencingEntity<T>
is redundant.
The following definition is preferred:
interface ISelfReferencingEntity<T extends ISelfReferencingEntity<T>>
extends IChildEntity<T> {
}