Java — расширяющийся интерфейс

Я пользуюсь этим сайтом уже около 6 месяцев, и пришло время задать мой первый вопрос, потому что я не могу найти на него ответ, по крайней мере, ответ, который я могу понять!

В этом фрагменте кода, почему этот интерфейс расширяется?

public interface PositionedVertex<V extends PositionedVertex<V>> {

/**
 * @return Position for node data.
 */
public Point getPosition();
}

Разве этот код не сделает то же самое?:

public interface PositionedVertex<V> {

/**
 * @return Position for node data.
 */
public Point getPosition();
}

Заранее спасибо!


person user2069658    schedule 13.02.2013    source источник
comment
Вы действительно должны принять один из отличных ответов.   -  person Patrick M    schedule 28.03.2016


Ответы (5)


Интерфейс не расширяется. <V extends PositionedVertex<V>> является привязкой универсального типа, связанного с вашим интерфейсом. Это просто означает, что параметр универсального типа для любого класса, реализующего этот интерфейс, сам должен быть PositionedVertex.

person rgettman    schedule 13.02.2013

В первом случае вы ограничили параметры универсального типа подтипом самого interface, тогда как во втором случае вы можете использовать любой тип в качестве параметра универсального типа. Таким образом, это потенциально разные объявления.

Например, вы можете определить ссылку следующим образом:

PositionedVertex<String>

для 2nd interface type, но не для 1st one.

person Rohit Jain    schedule 13.02.2013
comment
Благодарю вас! Супер быстрый ответ! - person user2069658; 13.02.2013

Он не расширяется. Он указывает, что его общий параметр V должен представлять тип, который расширяет или реализует сам себя.

person Patricia Shanahan    schedule 13.02.2013

Невозможно сказать, почему, не показывая еще немного кода. Или это все? На самом деле это говорит вам о том, что где-то в этом интерфейсе используется какой-то тип V (как параметр функции или как возвращаемый тип), который имеет тот же тип, что и сам интерфейс.

person verhage    schedule 13.02.2013

Это расширение для универсального. Дополнительная информация о дженериках: http://docs.oracle.com/javase/tutorial/extra/generics/intro.html

person meduoliai    schedule 13.02.2013