2012-01-14 106 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(); 
    } 

} 

第一個問題: 「?有沒有在這兩個類的語法的錯誤」

第二個問題:「如果不是,爲什麼輸出與我期望的相反?」

輸出:

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 2012-01-14 18:23:50

+2

第一個答案:ENUM_TYPE.TYPE1對於calling_foo是未知的。如果我使用了called_foo之一,它可以像預期的那樣工作。 – tim 2012-01-14 18:29:35

+0

@tim'ENUM_TYPE.TYPE1'沒問題我想,我已經在其他部分使用了這種語法,它不會給出任何問題 – Matteo 2012-01-14 18:30:31

回答

1

我不能設法編譯代碼 「原樣」。我想你已經在calling_foo中另外定義了ENUM_TYPE,TYPE1和TYPE2是反轉的,所以calling_foo.ENUM_TYPE.TYPE1實際上是使用的那個,並且對應於called_foo.ENUM_TYPE.TYPE2

您應該指定調用cf.method時使用的枚舉實際上是called_foo.ENUM_TYPE.TYPE1。通過這種方式,代碼可以編譯並獲得預期的結果。

+0

你是對的......我真的犯了一個愚蠢的錯誤!謝謝你的幫助;) – Matteo 2012-01-15 09:33:20