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

萝らか妹 提交于 2019-11-29 18:04:24

问题


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.


回答1:


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> { ... }



回答2:


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

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




回答3:


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>.



来源:https://stackoverflow.com/questions/7160980/how-to-implement-an-interface-with-an-enum-where-the-interface-extends-comparab

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!