如何在通用类中获取枚举的值?

6
如何在泛型中获取枚举的值?
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个回答

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

0

另一种方法是使用接口

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

使用

enum TmpEnum implements Sorter { A, B }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接