Как я могу получить значения enum в общем? - PullRequest
6 голосов
/ 21 июня 2019

Как я могу получить значения "enum" в общем?

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

С другой стороны, я могу запросить значения () для класса Enum:

enum TmpEnum { A, B }

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

Ответы [ 2 ]

8 голосов
/ 21 июня 2019

Class::getEnumConstants

Вы не можете напрямую получить его из T, потому что обобщение стерто компилятором Java, поэтому во время выполнения больше не известно, что такое T.

Что вы можете сделать, так это указать объект Class<T> в качестве параметра конструктора. Оттуда вы можете получить массив объектов enum, вызвав Class::getEnumConstants.

public class Sorter<T extends Enum<T>> {
    public Sorter(Class<T> clazz) {
        final T[] enumConstants = clazz.getEnumConstants();
    }
}
0 голосов
/ 21 июня 2019

другим способом является использование интерфейса

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

use

enum TmpEnum implements Sorter { A, B }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...