Включить 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, но потому, что она такая новая.