0

今日、Java で次のように宣言すると、次のようになることに気付きました。

public interface Foo<T extends Foo> {}

次に、次のタイプのオブジェクトを再帰的に宣言できます。

Foo<Foo<Foo<Foo<Foo<Foo<Foo... ...>>>>>> foo;

そして、あなたはそれの終わりに到達することはありませんが、警告を満たすことは決してできません:「Foo は生の型です。型 Foo への参照はパラメーター化する必要があります。非常に興味深いです。

4

3 に答える 3

6

パターンは通常、次のようなものinterface Foo<T extends Foo<T>>ですBar implements Foo<Bar>>

列挙型は典型的な例です。基本クラスはjava.lang.Enum<E extends Enum<E>>であり、 anenum MyEnumは実際には aclass MyEnum extends Enum<MyEnum>

于 2014-08-17T04:44:13.173 に答える
4

警告を取り除く方法があります:

public interface Foo<T extends Foo<?>> {}

Foo<Foo<Foo<Foo<Foo<Foo<Foo<?>>>>>>> foo;
于 2014-08-17T04:41:00.957 に答える
3
interface Foo<T extends Foo<T>> {}

class Bar implements Foo<Bar> {}

は警告なしでコンパイルされます。これは、 が にバインドTされBar、 が にFoo<T>バインドされFoo<Bar>、以降が完全に満たされるためです。Bar implements Foo<Bar>T extends Foo<T>

于 2014-08-17T04:45:37.387 に答える