Java中的Switch语句将选择相反的情况

时间:2012-01-14 18:20:53

标签: java enums switch-statement

我在类的方法中使用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 个答案:

答案 0 :(得分:1)

我无法“按原样”编译代码。我认为您已经在calling_foo中另外定义了ENUM_TYPE,TYPE1和TYPE2相反,因此calling_foo.ENUM_TYPE.TYPE1实际上是使用的called_foo.ENUM_TYPE.TYPE2,并且对应于ENUM_TYPE

当您调用cf.method时,应指定要使用的called_foo.ENUM_TYPE.TYPE1枚举实际为{{1}}。这样代码就可以编译并获得预期的结果。