一尘不染

Java如何用泛型实现枚举?

java

我有一个像这样的通用接口:

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;
        }
    };
}

有什么想法吗?


阅读 3193

收藏
2020-03-19

共1个答案

一尘不染

你不能 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() {};
}

不幸的是,它们都有缺点。

2020-03-19