10

私はこのサイトを約 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();
}

前もって感謝します!

4

5 に答える 5

12

インターフェイスはそれ自体を拡張していません。これ<V extends PositionedVertex<V>>は、インターフェイスに関連付けられているジェネリック型の境界です。これは、このインターフェイスを実装するクラスのジェネリック型パラメーター自体がPositionedVertex.

于 2013-02-13T19:29:04.363 に答える
4

最初のケースでは、ジェネリック型パラメーターをinterfaceそれ自体のサブタイプに制限しましたが、2 番目のケースでは、任意の型をジェネリック型パラメーターとして持つことができます。したがって、それらは潜在的に異なる宣言です。

たとえば、次のような参照を定義できます。

PositionedVertex<String>

のために、2nd interface typeではありません1st one

于 2013-02-13T19:28:22.773 に答える
1

それ自体は拡張されていません。ジェネリック パラメーター V が、それ自体を拡張または実装する型を表す必要があることを指定しています。

于 2013-02-13T19:28:57.740 に答える
0

これはジェネリックの拡張です。ジェネリックの詳細: http://docs.oracle.com/javase/tutorial/extra/generics/intro.html

于 2013-02-13T19:48:04.590 に答える
0

もう少しコードを表示しないと、その理由はわかりません。それともこれで全部?実際には、このインターフェイスのどこかで (関数のパラメーターとして、または戻り値の型として) 使用されている型 V があり、インターフェイス自体と同じ型であることが示されています。

于 2013-02-13T19:29:15.387 に答える