Проблема с конструктором общего класса с использованием перечисления
-
26-10-2019 - |
Вопрос
Я хочу разработать класс в Яве. Проблема в том, что конструктор не работает
Класс это:
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)
в конструктор тоже, но ни один из них не работает.
Я думаю, что это проблема с синтаксисом или с помощью метода
не могли бы вы помочь мне?
Спасибо заранее!
Решение
Проблема в том, что вам нужен экземпляр класса E
что нельзя сделать с использованием простого использования E
или же E.class
. Анкет Попробуйте предоставить Class<E>
В качестве параметра конструктора, чтобы сообщить классу, какой класс перечислена, он параметризован.
Это должно работать:
public EnumSetPlus(Class<E> clazz){
map = EnumSet.noneOf(clazz);
}
Проблема в том, что компилятор не знает о том, что такое тип E (какой он есть), поэтому он не может разрешить класс во время компиляции. Вам необходимо сделать эту информацию доступной во время выполнения, либо с параметрами, как предложено или путем подкласса EnumSetPlus
наряду с параметром конкретного типа, который затем можно определить с помощью отражения. Поскольку подход отражения будет излишним в этом простом случае, я бы посоветовал попробовать подход параметров.