我有一个像这样的通用接口:
interface A<T> { T getValue(); }
此接口具有有限的实例,因此最好将它们实现为枚举值。问题是那些实例具有不同类型的值,因此我尝试了以下方法,但无法编译:
public enum B implements A { A1<String> { @Override public String getValue() { return "value"; } }, A2<Integer> { @Override public Integer getValue() { return 0; } }; }
有什么想法吗?
你不能 Java不允许在枚举常量上使用泛型类型。但是,它们允许用于枚举类型:
public enum B implements A<String> { A1, A2; }
在这种情况下,你可以做的是为每个泛型类型都拥有一个枚举类型,或者通过将其设为一个类来“伪造”一个枚举:
public class B<T> implements A<T> { public static final B<String> A1 = new B<String>(); public static final B<Integer> A2 = new B<Integer>(); private B() {}; }
不幸的是,它们都有缺点。