Проблема с конструктором универсального класса, использующего enumset - PullRequest
0 голосов
/ 06 сентября 2011

Я хочу разработать класс в Java.Проблема в том, что конструктор не работает

Класс такой:

public class EnumSetPlus<E extends Enum<E>> { 

//Map
private EnumSet<E> map;

//Constructor
public EnumSetPlus(){

}

Я хочу инициализировать карту с помощью EnumSet.noneOf(E.class), но конструктор выдает ошибку.

Правильно ли конструктор?Могу ли я инициализировать карту переменных без конструктора?

Я пробовал public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E) в контексте переменной, но это не сработало.

Я тоже пробовал map = EnumSet.noneOf(E.class) в конструкторе, но тоже не работает.1016 * Я думаю, это проблема синтаксиса или метода

Не могли бы вы мне помочь?

Заранее спасибо!

1 Ответ

3 голосов
/ 06 сентября 2011

Проблема в том, что вам нужен экземпляр класса E, который нельзя сделать просто с помощью E или E.class.Попробуйте указать Class<E> в качестве параметра конструктора, чтобы сообщить классу, для какого класса enum он параметризован.

Это должно работать:

public EnumSetPlus(Class<E> clazz){
  map = EnumSet.noneOf(clazz);
}

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

...