我正在尝试在Android应用程序中使用switch语句,我必须检查一个整数是否等于Enum的某些值。代码如下:
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”。 有任何建议如何解决这个问题?在此先感谢!!!
答案 0 :(得分:6)
errorcode
是int
。应该是RPCServerResponseCode
类型,所以你可以使用类似的东西:
switch (RCPServerResponseCode.getByValue(errorcode))
{
...
}
答案 1 :(得分:2)
您尝试将INT
错误代码与RPCServerResponseCode
实例进行比较 - 这是不可能的。您需要使用getByValue
类中的RPCServerResponseCode
方法为您进行转换。之后,您可以在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 :(得分:2)
Java枚举是完全成熟的对象,不能隐式转换为整数。
这应该有效:
switch(RPCServerResponseCode.getByValue(errorCode)){
答案 3 :(得分:2)
int errorCode=4001;
RPCServerResponseCode code = RPCServerResponseCode.getByValue(errorCode);
switch(code){
...
}