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

use*_*660 6 java generics

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

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

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

enum TmpEnum { A, B }

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

Jan*_*omä 8

Class::getEnumConstants

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

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

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