2009-08-25 5 views
10

Отказ от ответственности: У меня нет целой тонны опыт работы с Java генериков, но мои коллеги и я только что провел битый час, пытаясь расшифровать интерфейс, который был структурирован так:Общий интерфейс принимает значение «Я» в качестве параметра. Рекурсивный общий?

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

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

+0

Не могли бы вы также добавить хотя бы часть тела интерфейса? – Zed

+2

Э-э, ну и объяснение того, что это значит. Извините за разочарование, введенное в вопросе, но вы должны понять разочарование, которое исходит из попытки понять радикально сложный код. У нас было четыре опытных разработчика, пытающихся понять этот код, который был написан нашим пятым человеком - разработчиком за пределами сайта. Никто из нас не мог сделать головы или хвосты. Через полтора часа. Поэтому, разумеется, я был немного расстроен, когда я написал вопрос. –

+2

'Interface' не является правильной Java синтаксиса – newacct

ответ

10

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

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

Есть некоторые поучительные ответы в this Stack Overflow question about Enum, которые должны пролить свет на конкретное использование дженериков для вас, а также ответить на это более элегантно, чем я мог.

+0

Спасибо, это очень помогает. Мы были очень, очень смущены этим. –

+2

«Есть смысл в этом». Итак, почему бы вам не объяснить это значение? – newacct

+0

@newacct, пока он является обычным для встроенного резюме ссылки на вопрос. Я не думаю, что копия-вставка связанного ответа была бы более ценной в этом случае (это ссылка на другой вопрос SO, поэтому будет иметь такое же время жизни, что и этот) ... Не стесняйтесь читать и обобщать связанный ответ здесь. –

Смежные вопросы