How to implement an interface with an enum, where the interface extends Comparable?

soc picture soc · Aug 23, 2011 · Viewed 22.9k times · Source

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.

Answer

NimChimpsky picture NimChimpsky · Aug 23, 2011

Enum already implements comparable so you can't override it.

A general answer regarding why-would-an-enum-implement-an-interface.