2011-08-30 82 views
0

我想在Android的aplication,在這裏我要檢查一個整數等於一些枚舉的價值。代碼使用switch語句是這樣的:Java的開關case語句問題

public enum RPCServerResponseCode{ 


     E_INCORRECT_LOGIN(4001),     
     E_ACCOUNT_DISABLED(4002), 
     E_ACCOUNT_NOT_ACTIVE(4003); 


     private int value; 
     private RPCServerResponseCode(int i) { 
      this.value=i; 
     } 
     public static RPCServerResponseCode getByValue(int i) { 
      for(RPCServerResponseCode dt : RPCServerResponseCode.values()) { 
       if(dt.value == i) { 
        return dt; 
       } 
      } 
      throw new IllegalArgumentException("No datatype with " + i + " exists"); 
     } 

    } 

} 

我的switch語句是這樣的:

int errorCode; 
switch(errorCode){ 

      case RPCServerResponseCode.E_INCORRECT_LOGIN : 
      { 
        if (user.isAuthenticated) 
        { 
         // logout before login 
        } 
        break; 
      } 
      case RPCServerResponseCode.E_ACCOUNT_NOT_ACTIVE: 
      { 
       if (user.isAuthenticated) 
       { 
        //logout 
       } 
       break; 
      } 
     } 

    } 

,但我得到錯誤說的:「類型不匹配:不能從RPCCommucatorDefines.RPCServerResponseCode轉換爲int」。 任何建議如何解決這個問題?提前致謝!!!

+1

的可能重複[switch語句:數枚舉值/ 1002 = MyEnum.NewYorkID](http://stackoverflow.com/questions/7162192/switch-statement-number-to-enum-value-1002-myenum-newyorkid) –

+0

感謝您的評論。其實我沒有看到這個問題。 –

回答

6

errorcodeint。應該是RPCServerResponseCode類型的,所以你可以使用類似:

switch (RCPServerResponseCode.getByValue(errorcode)) 
{ 
    ... 
} 
2

你想你的INT錯誤代碼比作RPCServerResponseCode實例 - 這是不可能的。您需要使用RPCServerResponseCode類中的方法getByValue爲您進行轉換。在這之後,你可以在switch語句中使用的結果(這將是一個RPCServerResponseCode實例):

int errorCode; 
RPCServerResponseCode responseCode = RPCServerResponseCode.getByValue(errorCode); 

switch(responseCode){ 

      case RPCServerResponseCode.E_INCORRECT_LOGIN : 
      { 
        if (user.isAuthenticated) 
        { 
         // logout before login 
        } 
        break; 
      } 
      case RPCServerResponseCode.E_ACCOUNT_NOT_ACTIVE: 
      { 
       if (user.isAuthenticated) 
       { 
        //logout 
       } 
       break; 
      } 
     } 

    } 
2

Java的枚舉是完全成熟的對象,不能被隱式轉換爲整數。

這應該工作:

switch(RPCServerResponseCode.getByValue(errorCode)){ 
2

你可以說

int errorCode=4001; 
RPCServerResponseCode code = RPCServerResponseCode.getByValue(errorCode); 
switch(code){ 
... 
}