Общая c подпись для самоссылающейся сущности? - PullRequest
0 голосов
/ 14 апреля 2020

Я определил интерфейс для дочерних сущностей указанного типа.

// 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 Category implements ISelfReferencingEntity<Category> {

    @ManyToOne
    private Category parent;
}

Первоначальный вопрос заключается в том, является ли добавление части & IChildEntity<T> вместе с extends IChildEntity<T> избыточным или нет.

1 Ответ

1 голос
/ 15 апреля 2020

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> {
}
...