12

次のコードを検討してください。

public interface Foo extends Comparable<Foo> {}

public enum FooImpl implements Foo {}

タイプ消去の制限により、次のエラーが表示されます。

java.lang.Comparable は異なる引数で継承できません:<Foo>および<FooImpl>

次の要件があります。

  • FooImpl注釈のデフォルト値として使用する必要があるため、列挙型である必要があります。
  • 私のインターフェースの契約は、それが比較可能である必要があるということです。

インターフェイスでジェネリック境界を使用しようとしましたが、これは Java ではサポートされていません。

4

3 に答える 3

13

Enum は Comparable を実装するため、FooImpl は互換性のない引数で Comparable を 2 回拡張することになります。

以下が機能します。

public interface Foo<SelfType extends Foo<SelfType>> extends Comparable<SelfType> { ... }

public enum FooImpl implements Foo<FooImpl> { ... }
于 2011-08-23T13:36:43.200 に答える
12

Enum はすでに同等のものを実装しているため、オーバーライドすることはできません。

why-would-an-enum-implement-an-interfaceに関する一般的な回答。

于 2011-08-23T12:28:30.893 に答える
1

実際に表示されるエラーは次のとおりです。

インターフェイス Comparable は、異なる引数で複数回実装することはできません:Comparable<FooImpl>およびComparable<Foo>

enumFooImplはすでにComparable<FooImpl>暗黙的に実装されているため、次のように再度オーバーライドすることはできません。Comparable<Foo>.

于 2013-11-16T13:12:57.370 に答える