У меня есть interface
:Общий параметр метода: перечисление, который реализует интерфейс
public interface NamedEnum {
String getName();
}
enum
который реализует interface
: Метод
public enum MyEnum implements NamedEnum {
MYVALUE1("My value one"),
MYVALUE2("My value two");
private String name;
private MyEnum(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
, который не компилируется:
public static Map<Integer,String> wrong(Enum<? extends NamedEnum> value) {
Map<Integer,String> result = new LinkedHashMap<Integer, String>();
for (Enum<? extends NamedEnum> val : value.values())
result.put(val.ordinal(), val.getName());
return result;
}
Две ошибки:
The method values() is undefined for the type Enum<capture#1-of ? extends NamedEnum>
The method getName() is undefined for the type Enum<capture#3-of ? extends NamedEnum>
Я не могу понять, как описанный выше способ может принимать enum
который реализует interface
.
Следует, наверное, указать, что вы можете не использовать 'порядковый номер '. Цитирование Javadoc: «Большинство программистов не будут использовать этот метод. Он предназначен для использования сложными структурами данных на основе enum, такими как EnumSet и EnumMap». Вы не сказали, что делаете, но обратите внимание. Кроме того, проверьте * Эффективная Java 2nd ed * Пункт 33: «Используйте EnumMap вместо порядкового индексации». –
* «Ты не сказал, что делаешь» *: Я думал, что это будет бессмысленно, но это не так. Хорошо ... перезагрузитесь! Я прыгнул с Java6 до 8, и я пропустил некоторые промежуточные. Я не знал о * множественной привязке в generics *, но я уже видел цитату 'ordinal' в javaDoc, но я был ленив и не проверял« EnumSet/Map »: мой плохой. Мне нужно мое перечисление для создания select/options, такого как '' и так далее ... Я понимаю, что я могу сделать это просто так: ' 'и получить значения с помощью' valueOf ("MYVALUE1") '. – fantaghirocco
Здесь нет ничего нового, поскольку Java 6 (см. [Типы пересечений в JLS] (https://docs.oracle.com/javase/specs/jls/se6/html/typesValues.html#4.9)). Кроме того, EJ 2nd Ed был написан для Java 6. Но да, за то, что вы говорите, что вы делаете, использование имен перечислений намного лучше, чем ординалы. –