2013-02-13 5 views
10

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

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

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

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

Wouldnt этот код делать то же самое ?:

public interface PositionedVertex<V> { 

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

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

+0

Вы действительно должны принять один из отличных ответов. –

ответ

4

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

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

PositionedVertex<String> 

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

+0

Спасибо! Супер быстрый ответ! – user2069658

+0

@ пользователь2069658. Добро пожаловать :) –

+0

+1, хороший пример. – rgettman

1

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

10

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

0

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

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