考虑以下代码:
public interface Foo extends Comparable<Foo> {}
public enum FooImpl implements Foo {}
由于类型擦除的限制,我收到以下错误:
java.lang.Comparable不能使用不同的参数继承:
<Foo>
和<FooImpl>
我有以下要求:
FooImpl
需要是枚举,因为我需要将其用作注释中的默认值。我已经尝试在界面中使用泛型边界,但Java不支持这种方式。
答案 0 :(得分:12)
枚举已实施comparable,因此您无法覆盖它。
答案 1 :(得分:12)
Enums实现Comparable,因此FooImpl最终会使用不兼容的参数扩展Comparable两次。
以下内容可行:
public interface Foo<SelfType extends Foo<SelfType>> extends Comparable<SelfType> { ... }
public enum FooImpl implements Foo<FooImpl> { ... }
答案 2 :(得分:1)
实际上你会得到的错误是:
接口Comparable不能多次实现 不同的论点 :
Comparable<FooImpl>
和Comparable<Foo>
由于枚举FooImpl
已经隐式实施Comparable<FooImpl>
,因此无法再将其覆盖为Comparable<Foo>.