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();
}

Спасибо заранее!

Ответ 1

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

Ответ 2

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

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

PositionedVertex<String>

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

Ответ 3

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

Ответ 4

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