Switch Statement в Java выберет противоположный случай - PullRequest
0 голосов
/ 14 января 2012

Я использую оператор switch в методе класса, который вызывается другим классом.

Оператор Switch получает в качестве входных данных переменную, представляющую тип enum.

Названный класс:

public class called_foo {

    public static enum ENUM_TYPE {
        TYPE2, TYPE1
    }

    public void method( ENUM_TYPE type ){

        switch( type ){

            case TYPE1: System.out.println("TYPE1");
                        break;

            case TYPE2: System.out.println("TYPE2");
                        break;

            default:    System.out.println("Error in retrieving Type");
                        System.exit(1);
        }
    }

}    

Класс вызова:

public class calling_foo {

    public void run(){

        called_foo cf = new called_foo();
        cf.method( ENUM_TYPE.TYPE1 );
    }

    public static void main(String[] args) throws Exception {

        calling_foo f = new calling_foo();
        f.run();
    }

}

Первый вопрос: «Есть ли ошибки в синтаксисе этих двух классов?»

Второй вопрос: «Если нет, то почему результат противоположен тому, что я ожидал?»

Выход:

if I call cf.method( ENUM_TYPE.TYPE1 ); I see on screen "TYPE2"
if I call cf.method( ENUM_TYPE.TYPE2 ); I see on screen "TYPE1"

1 Ответ

1 голос
/ 14 января 2012

Мне не удается скомпилировать ваш код "как есть".Я думаю, что вы определили ENUM_TYPE в другой раз в call_foo, с перевернутыми TYPE1 и TYPE2, так что на самом деле используется calling_foo.ENUM_TYPE.TYPE1 и соответствует called_foo.ENUM_TYPE.TYPE2.

. Вы должны указать, что перечисление ENUM_TYPEиспользовать на самом деле called_foo.ENUM_TYPE.TYPE1 при вызове cf.method.Таким образом, код компилируется, и вы получите ожидаемый результат.

...