Включить Enum в Java
Возможные дубликаты:
Ошибка компиляции - переключатель с перечислением
Почему я не могу получить ссылку на константу Enum в ярлыке case?
Почему вы не можете включить перечисление в Java? Это кажется достаточно простым, чтобы сделать и сделать для некоторого удобного кода. Также этот вопрос может быть применим к String
. Вы можете включить char
, но не String
...?
Ответы
Ответ 1
Вы определенно можете включать перечисления. Пример, размещенный в учебниках Java.
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY:
System.out.println("Mondays are bad.");
break;
case FRIDAY:
System.out.println("Fridays are better.");
break;
case SATURDAY:
case SUNDAY:
System.out.println("Weekends are best.");
break;
default:
System.out.println("Midweek days are so-so.");
break;
}
}
}
Ответ 2
Фактически вы можете switch
на enum
s, но вы не можете switch
на String
до Java 7. Возможно, вы захотите использовать диспетчер полиморфных методов с Java enum
, а не явный switch
, Обратите внимание, что enum
- это объекты в Java, а не только символы для int
, как в C/С++. У вас может быть метод типа enum
, а вместо того, чтобы писать switch
, просто вызовите метод - одну строку кода: done!
enum MyEnum {
SOME_ENUM_CONSTANT {
@Override
public void method() {
System.out.println("first enum constant behavior!");
}
},
ANOTHER_ENUM_CONSTANT {
@Override
public void method() {
System.out.println("second enum constant behavior!");
}
}; // note the semi-colon after the final constant, not just a comma!
public abstract void method(); // could also be in an interface that MyEnum implements
}
void aMethodSomewhere(final MyEnum e) {
doSomeStuff();
e.method(); // here is where the switch would be, now it one line of code!
doSomeOtherStuff();
}
Ответ 3
Во-первых, вы можете включить enum
в Java. Я предполагаю, что ты намеревался сказать, что не можешь, но можешь. char
имеют заданный диапазон значений, поэтому его легко сравнивать. Строки могут быть любыми.
Оператор A switch
обычно реализуется как таблица перехода (таблица ветвей) в базовой компиляции, которая возможна только с конечным набор значений. С# может включать строки, но это приводит к снижению производительности, поскольку таблица перехода не может быть использована.
Java 7 и более поздние версии поддерживают String
переключатели с теми же характеристиками.
Ответ 4
-
Включить перечисления отлично.
enum MyEnum { CONST_ONE, CONST_TWO }
class Test {
public static void main(String[] args) {
MyEnum e = MyEnum.CONST_ONE;
switch (e) {
case CONST_ONE: System.out.println(1); break;
case CONST_TWO: System.out.println(2); break;
}
}
}
демонстрация ideone.com
-
Переключатели для строк реализованы в Java 7.
Прочитайте все новые функции здесь.
Ответ 5
Возможно, вы неправильно используете перечисления в случаях переключения. По сравнению с приведенным выше примером CoolBeans.. вы можете делать следующее:
switch(day) {
case Day.MONDAY:
// Something..
break;
case Day.FRIDAY:
// Something friday
break;
}
Убедитесь, что вы используете фактические значения перечисления вместо EnumType.EnumValue
Eclipse указывает на эту ошибку, хотя..
Ответ 6
На самом деле вы можете использовать оператор switch со строками в Java... к сожалению, это новая функция Java 7, и большинство людей не используют Java 7, но потому, что она такая новая.