2013-02-13 13 views
10

Używam tej strony od około 6 miesięcy, a jej czas zadać moje pierwsze pytanie, ponieważ nie mogę znaleźć odpowiedzi na to, przynajmniej nie odpowiedź, że mogę zrozumieć!Java - Interfejs rozszerzający się

W tym fragmencie kodu, dlaczego ten interfejs się rozszerza?

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

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

byłby ten kod robić te same ?:

public interface PositionedVertex<V> { 

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

Dzięki z góry!

+0

Powinieneś naprawdę zaakceptować jedną z doskonałych odpowiedzi. –

Odpowiedz

4

W pierwszym przypadku ograniczyłeś parametry rodzajowe do podtypu samego interface, podczas gdy w drugim przypadku możesz mieć dowolny typ jako parametr typu ogólnego. Tak więc są to potencjalnie różne deklaracje.

Na przykład można zdefiniować odniesienie takiego:

PositionedVertex<String> 

dla 2nd interface type, ale nie dla 1st one.

+0

Dziękujemy! Super szybka odpowiedź! – user2069658

+0

@ user2069658. Nie ma za co :) –

+0

+1, Dobry przykład. – rgettman

1

Nie rozszerza się. Określa, że ​​jego parametr ogólny V musi reprezentować typ, który rozszerza się lub implementuje.

10

Interfejs się nie rozszerza. Numer <V extends PositionedVertex<V>> jest związany z typem generycznym powiązanym z interfejsem. Oznacza to po prostu, że ogólny parametr typu dla dowolnej klasy implementującej ten interfejs musi sam być parametrem PositionedVertex.

0

Nie wiadomo dlaczego, nie pokazując więcej kodu. Czy to wszystko? W rzeczywistości mówi się, że istnieje jakiś typ V używany gdzieś w tym interfejsie (jako parametr do funkcji lub jako typ zwracany), który jest tego samego typu, co sam interfejs.