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 supported 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>
and Comparable<Foo>
As enum FooImpl
already implementing Comparable<FooImpl>
implicitly, you can not override it again as Comparable<Foo>.