How to implement an interface with an enum, where the interface extends Comparable?
Consider this code:
public interface Foo extends Comparable<Foo> {}
public enum FooImpl implements Foo {}
Due to the restrictions of type erasure, I receive the following error:
java.lang.Comparable cannot be inherited with different arguments:
<Foo>
and<FooImpl>
I have the following requirements:
FooImpl
needs to be an enum, because I need to use it as a default value in annotations.- The contract of my interface is that it needs to be comparable.
I already tried using generic bounds in the interface, but this is not supporte开发者_运维技巧d in Java.
Enums implement Comparable, so FooImpl ends up extending Comparable twice with incompatible arguments.
The following will work:
public interface Foo<SelfType extends Foo<SelfType>> extends Comparable<SelfType> { ... }
public enum FooImpl implements Foo<FooImpl> { ... }
Enum already implements comparable so you can't override it.
A general answer regarding why-would-an-enum-implement-an-interface.
Actually the error you will get is :
The interface Comparable cannot be implemented more than once with different arguments :
Comparable<FooImpl>
andComparable<Foo>
As enum FooImpl
already implementing Comparable<FooImpl>
implicitly, you can not override it again as Comparable<Foo>.
精彩评论