Java 如何实现带有枚举的接口,该接口在哪里扩展?

Java 如何实现带有枚举的接口,该接口在哪里扩展?,java,generics,interface,enums,comparable,Java,Generics,Interface,Enums,Comparable,考虑以下代码: public interface Foo extends Comparable<Foo> {} public enum FooImpl implements Foo {} 公共接口Foo扩展了{} 公共枚举FooImpl实现Foo{} 由于类型擦除的限制,我收到以下错误: java.lang.Compariable不能用不同的参数继承:和 我有以下要求: FooImpl需要是一个枚举,因为我需要在注释中将其用作默认值 我的界面的契约是,它需要具有可比性 我已

考虑以下代码:

public interface Foo extends Comparable<Foo> {}

public enum FooImpl implements Foo {}
公共接口Foo扩展了{}
公共枚举FooImpl实现Foo{}
由于类型擦除的限制,我收到以下错误:

java.lang.Compariable不能用不同的参数继承:

我有以下要求:

  • FooImpl
    需要是一个枚举,因为我需要在注释中将其用作默认值
  • 我的界面的契约是,它需要具有可比性
我已经尝试在接口中使用泛型边界,但Java不支持这一点。

枚举已经实现,因此您无法覆盖它


关于.

枚举实现Comparable的一般答案,因此FooImpl最终使用不兼容的参数扩展Comparable两次

以下工作将起作用:

public interface Foo<SelfType extends Foo<SelfType>> extends Comparable<SelfType> { ... }

public enum FooImpl implements Foo<FooImpl> { ... }
公共接口Foo扩展了{…}
公共枚举FooImpl实现Foo{…}

实际上,您将得到的错误是:

此接口不能使用多次实现 不同的论点 :
可比
可比


由于enum
FooImpl
已隐式实现了
Compariable
,因此不能再次将其重写为
Compariable。

尝试
公共接口Foo
公共enum FooImpl实现了Foo,Compariable{…}问题是
FooImpl
已经实现了
Comparable
。您只是想证明它实现了吗?将其写在注释中。我需要能够将
角色
的实例视为
可比较的
,注释在这里没有帮助。就在
公共枚举…
上方,添加:
//注意:实现可比较。
您在回避这个问题。如果它是另一个界面呢。@aioobe,嗯?如果我想通过我的接口引用我的枚举对象:(
interface Foo{…}Enum1 implements Foo{…}Foo x1=Enum1.FIRST;
),如果我还需要在需要
compariable
的上下文中使用它,问题是如何实现扩展Compariable的接口,然后我必须声明
Foo扩展了Comparable
。如果不在@jvdnese的答案中键入(公认的笨拙),就不能让两个不同的枚举实现Foo,并让编译器知道Foo是可比较的。(这只是一个警告,因此您可以跳过
而不受影响。带有警告的示例是
TreeSet x=newtreeset()只要
公共接口Foo扩展即可