开发者

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> and Comparable<Foo>

As enum FooImpl already implementing Comparable<FooImpl> implicitly, you can not override it again as Comparable<Foo>.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜