Общий интерфейс принимает значение "Я" в качестве параметра. Рекурсивный общий?

Отказ от ответственности: у меня нет целого опыта работы с Java Generics, но мы с коллегами провели цельный час, пытаясь расшифровать интерфейс, который был структурирован следующим образом:

interface HasAttributes<A extends HasAttributes<A, B>, 
                        B extends HasAttributesType<B>> extends Identification<B> {

Что именно означает, когда интерфейс generic принимает параметр типа, который сам по себе? Что это делает?

Ответ 1

В этом есть смысл - класс Java Enum является хорошим примером ситуации simliar:

public abstract class Enum<E extends Enum<E>>
    implements Comparable<E>, Serializable

В есть вопрос о переполнении стека об Enum, который должен пролить свет на это конкретное использование дженериков для вас, а также ответить на это более элегантно чем я мог.