sort interfaces implementacion ejemplo collection java generics interface enums comparable

interfaces - java sort arraylist



¿Cómo implementar una interfaz con una enumeración, donde la interfaz se extiende Comparable? (3)

Considera este código:

public interface Foo extends Comparable<Foo> {} public enum FooImpl implements Foo {}

Debido a las restricciones de borrado de tipo, recibo el siguiente error:

java.lang.Comparable no se puede heredar con diferentes argumentos: <Foo> y <FooImpl>

Tengo los siguientes requisitos:

  • FooImpl necesita ser una enumeración, porque necesito usarlo como valor predeterminado en las anotaciones.
  • El contrato de mi interfaz es que debe ser comparable.

Ya traté de usar límites genéricos en la interfaz, pero esto no es compatible con Java.


Los enumerados implementan Comparable, por lo que FooImpl termina extendiendo Comparable dos veces con argumentos incompatibles.

Lo siguiente funcionará:

public interface Foo<SelfType extends Foo<SelfType>> extends Comparable<SelfType> { ... } public enum FooImpl implements Foo<FooImpl> { ... }


En realidad, el error que obtendrá es:

La interfaz Comparable no se puede implementar más de una vez con diferentes argumentos: Comparable<FooImpl> y Comparable<Foo>

Como enum FooImpl ya está implementando Comparable<FooImpl> implícitamente, no puede anularlo de nuevo como Comparable<Foo>.