2013-02-13 5 views
10

Ich habe jetzt für ca. 6 Monate Diese Website wurde verwendet und seine Zeit, meine erste Frage zu stellen, weil ich die Antwort auf diese Frage finden können, atleast nicht eine Antwort, die ich verstehen kann!Java - Schnittstelle erstreckt sich

In diesem Stück Code, warum diese Schnittstelle selbst erstreckt?

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

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

Wouldnt dieser Code tun die gleichen ?:

public interface PositionedVertex<V> { 

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

Vielen Dank im Voraus!

+0

Sie sollten wirklich eine der ausgezeichneten Antworten akzeptieren. –

Antwort

4

Im ersten Fall haben Sie Ihre generischen Typparameter als Subtyp von interface selbst definiert, während Sie im zweiten Fall einen beliebigen Typ als generischen Typparameter haben können. Sie sind also möglicherweise unterschiedliche Deklarationen.

Zum Beispiel können Sie eine Referenz wie definieren:

PositionedVertex<String> 

für die 2nd interface type, aber nicht für die 1st one.

+0

Vielen Dank! Super schnelle Antwort! – user2069658

+0

@ user2069658. Gern geschehen :) –

+0

+1, Gutes Beispiel. – rgettman

1

Es erstreckt sich nicht. Es gibt an, dass sein generischer Parameter V einen Typ darstellen muss, der sich selbst erweitert oder implementiert.

10

Die Schnittstelle erweitert sich nicht. Die <V extends PositionedVertex<V>> ist eine Bindung an den generischen Typ, der Ihrer Schnittstelle zugeordnet ist. Es bedeutet nur, dass der generische Typparameter für jede Klasse, die diese Schnittstelle implementiert, selbst eine PositionedVertex sein muss.

0

Es ist nicht abzusehen, warum ohne etwas mehr Code zeigt. Oder ist das alles? Was es Ihnen tatsächlich sagt, ist, dass es irgendwo in dieser Schnittstelle einen Typ V gibt (als Parameter für eine Funktion oder als Rückgabetyp), der vom selben Typ wie die Schnittstelle selbst ist.

Verwandte Themen