Это проблема с вашим подстановочным знаком. Вы должны объявить свою карту как Map<BaseEnum, WidgetData>
, а также EnumMap как ex. HashMap<BaseEnum, WidgetData>
Существует множество дискуссий о том, почему это верно для SO, но посмотрите Что такое PECS (Producer Extends Consumer Super)? , например.
1009 ** * Редактировать 1010 ** * 1011
К сожалению, вы правы - вы не можете использовать EnumMap там. Это потому, что вы пытаетесь использовать интерфейс, и EnumMap оговаривает (поскольку для него требуется тип T extends Enum<T>
), что это должен быть только Enum.
Ваш выбор в основном сводится к
1) Используйте EnumMap<EnumOps1,...>
и проиграйте в полиморфизме
2) Используйте HashMap<BaseEnum,...>
и все работает нормально, но вы должны использовать карту не-Enum.
3) Используйте подстановочные знаки, когда вы пытаетесь, но вы столкнетесь с ограничениями PECS, которые я связывал ранее, например, Вы можете добавлять или удалять элементы, но не оба (super
против extends
)