Comment implémenter une interface avec une énumération, où l'interface s'étend Comparable?
Considérer ce code:
public interface Foo extends Comparable<Foo> {}
public enum FooImpl implements Foo {}
En raison des restrictions de type d'effacement, je reçois l'erreur suivante:
java.lang.Comparable ne peut pas être héritée avec des arguments différents:
<Foo>
et<FooImpl>
J'ai les exigences suivantes:
FooImpl
doit être un enum, parce que j'ai besoin de l'utiliser comme valeur par défaut dans les annotations.- Le contrat de mon interface, c'est qu'il doit être comparables.
J'ai déjà essayé de l'utilisation de générique limites dans l'interface, mais ce n'est pas prise en charge par Java.
source d'informationauteur soc
Vous devez vous connecter pour publier un commentaire.
Enums en œuvre Comparable, de sorte FooImpl finit par extension Comparable à deux reprises avec le mauvais arguments.
Suivantes:
Enum implémente déjà comparable de sorte que vous ne pouvez pas remplacer.
Une réponse d'ordre général concernant pourquoi-serait-un-enum-mettre en œuvre-une-interface.
En fait, l'erreur que vous obtiendrez, c'est :
Comme enum
FooImpl
déjà la mise en œuvre deComparable<FooImpl>
implicitement, vous ne pouvez pas le remplacer à nouveau commeComparable<Foo>.