Java использует значения метода Enum Generic - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу параметризовать класс с помощью перечисления, затем в конструкторе класса создать массив, имеющий размер числа элементов в перечислении.

Я создал класс следующим образом:

public class LogLine <T extends Enum<T>> {

А потом в конструкторе я попытался написать это:

public LogLine(){
numberOfElementsInEnum = T.values().length;
//then I would create the Array based on the numberOfElementsInEnum variable

Это не работает.Компилятор не видит метод значений.Я попытался с T, расширяющим String вместо Enum.Тогда все статические методы доступны.В чем здесь проблема?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

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

Все зависит от вашего интерфейса.

Если ваш интерфейс является просто потребителем элементов (и, учитывая, что вы входите в систему, я подозреваю, что это может быть), то вы можете сойти с рукленивый подсчет количества значений в тот момент, когда вы фактически потребляете элемент.

class LogLine<T extends Enum<T>>
{
    public void add(T item)
    {
        int numberOfElementsInEnum = item.getDeclaringClass().getEnumConstants().length;
    }
}

Нам нужно знать ваши требования и увидеть остальную часть вашей реализации LogLine, чтобы сказать, подходит ли этот подходподходит.

0 голосов
/ 07 февраля 2019

Вы должны объявить конструктор, который принимает Class:

public LogLine(Class<T> c) {
    numberOfElementsInEnum = c.getEnumConstants().length;
}

См. Также здесь: https://docs.oracle.com/javase/tutorial/reflect/special/enumMembers.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...