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
- 我的界面的契约是,它需要具有可比性
关于.枚举实现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扩展即可