2012-01-14 14 views
0

私は別のクラスによって呼び出されたクラスのメソッドでswitch文を使用しています。Javaの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(); 
    } 

} 

最初の質問: "エラーがこの2つのクラスの構文ではありますが?"

2番目の質問:「そうでない場合、なぜ出力が私が期待しているものと反対ですか?」

出力:

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" 
+0

構文エラーがあるとコンパイラはコンパイルされません;) – TimWolla

+2

最初の回答:ENUM_TYPE.TYPE1はcalling_fooには不明です。 called_fooの1つを使用すると、期待通りに動作します。 – tim

+0

@tim 'ENUM_TYPE.TYPE1'は大丈夫だと思いますが、私はすでにこの構文を他の部分で使っていますが、何の問題もありません。 – Matteo

答えて

1

私は "として" あなたのコードをコンパイルするために管理することはできません。私は、TYPE1とTYPE2を逆にして、call_fooでENUM_TYPEをもう一度定義したと思います。calling_foo.ENUM_TYPE.TYPE1が実際に使用されており、called_foo.ENUM_TYPE.TYPE2に対応しています。

cf.methodを呼び出すときに、ENUM_TYPEの列挙型が実際にはcalled_foo.ENUM_TYPE.TYPE1であることを指定する必要があります。このようにしてコードがコンパイルされ、期待される結果が得られます。

+0

あなたは正しい...私は本当に愚かな間違いをしました! – Matteo

関連する問題