java枚举比较大小写_关于java:切换大小写应映射为枚举类型的整数

恩..看来Java中的枚举类比其C或C ++计数器具有更多的通用性,但是对于这种特定的代码构造,我试图使用其对象性质只会给我带来麻烦。

我所拥有的是这样的:

public static enum ServerResponse{

SIGN_UP_SUCESS(0),

INTERNAL_SERVER_ERROR(1),

EMAIL_ALREADY_REGISTERED(2),

SIGNIN_FAILED(3),

WAITING_CONFIRMATION(4),

SIGNIN_SUCESS(5),

BLOCKED_ACCOUNT(6),

INACTIVE_ACCOUNT(7);

private final int numcode;

ServerResponse(int num){

numcode = num;

}

final int numCode(){ return numcode;}

}

您会看到问题出在服务器给我一个数字响应时,我无法直接将其与enum类进行比较。然后我的想法是创建numCode()方法,该方法将返回实例化枚举的integer属性。我试图做这样的事情:

int SERVER_RESPONSE = ServerInterface.sendRequest();

switch(SERVER_RESPONSE){

ServerInterface.ServerResponse.BLOCKED_ACCOUNT.numCode():

//Do something

ServerInterface.ServerResponse.INTERNAL_SERVER_ERROR:

}

但是正如您可以想象的那样,以上方法均无效。第一种情况比较抱怨"条件表达式必须是常量表达式",第二种类型只是给我一个类型不匹配错误。

那我该怎么做呢?好吧,现在我正在做这样的事情:

for(ServerResponse response : ServerResponse.values()){

if(response.numCode() == SERVER_RESPONSE){

return response;

}

}

但这很丑..我想使用switch语句,毕竟这是枚举类型的全部目的吗?所以请,我在这里想念什么?

谢谢

纳尔逊

看看stackoverflow.com/questions/1080904/这是一个带有字符串值的Enum,但是很容易转换为int。

您在枚举中缺少将整数映射到枚举值的方法。 确切的操作取决于您-如果整数从0开始是连续的,则可能使用数组...或使用Map。 无论哪种方式,您都可以这样做:

// Please don't use caps for non-constants

int serverResponseNumber = ServerInterface.sendRequest();

ServerResponse serverResponse = ServerResponse.fromInt(serverResponseNumber);

if (serverResponse == null) {

// Do something with an unknown response - switch will barf otherwise.

// Possibly throw an exception yourself?

}

switch(serverResponse) {

case SIGN_UP_SUCCESS:

...

}

酷..这正是我想要的。 谢谢!

ServerResponse serverResponse = ServerResponse.values()[serverResponseNumber] @Jon对您没有帮助吗?

@BobbyKumar:如果您想始终将序数与数字值绑定,那将起作用。 目前尚不清楚这是一个好主意。 它还需要每次使用它时都要填充一个数组...如果要使用序数,我将缓存values的值,而不是每次都调用它。

先创建一个代表数字的ENUM,然后创建一个整数(整数)/枚举的MAP(或数组),然后使用枚举,则交换大小写有什么好处?

数字不能直接在开关盒中使用。 如果数字文档/理解存在问题,请定义数字常数。

在我看来,这是对枚举的滥用,这是我们在这里讨论的内容。

我也有同样的感觉。 但是,由于我来自C,C ++背景,并且用于枚举与整数值相对应的枚举,所以我才像以前一样开始使用它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值