首页 > 解决方案 > 如何在泛型中获取“枚举”的值?

问题描述

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

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

标签: javagenerics

解决方案


Class::getEnumConstants

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

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

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

推荐阅读