如何获得泛型中“枚举”的值?

时间:2019-06-21 11:34:44

标签: java generics

如何获取泛型中“枚举”的值?

public class Sorter<T extends Enum<?>> {
    public Sorter() {
        T[] result = T.values(); // <- Compilation error
    }
}

另一方面,我可以查询Enum类的values():

enum TmpEnum { A, B }

public class Tmp {
    void func() {
        T[] result = TmpEnum.values(); // <- It works
    }
}

2 个答案:

答案 0 :(得分:8)

Class::getEnumConstants

您不能直接从T中获取它,因为泛型是Java编译器erased的,因此在运行时不再知道T是什么。

您可以做的是需要一个Class<T>对象作为构造函数参数。从那里,您可以通过调用Class::getEnumConstants获得枚举对象的数组。

public class Sorter<T extends Enum<T>> {
    public Sorter(Class<T> clazz) {
        final T[] enumConstants = clazz.getEnumConstants();
    }
}

答案 1 :(得分:0)

另一种方法是使用界面

public interface Sorter{
    default public void sorting(){
         Sorter[] list=this.getClass().getEnumConstants();
    }
}

使用

enum TmpEnum implements Sorter { A, B }