Проблема с конструктором общего класса с использованием перечисления

StackOverflow https://stackoverflow.com/questions/7317610

Вопрос

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

Класс это:

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 наряду с параметром конкретного типа, который затем можно определить с помощью отражения. Поскольку подход отражения будет излишним в этом простом случае, я бы посоветовал попробовать подход параметров.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top