java switch case null_如何在switch中使用null

Beez..

12

鉴于:

public enum PersonType {

COOL_GUY(1),

JERK(2);

private final int typeId;

private PersonType(int typeId) {

this.typeId = typeId;

}

public final int getTypeId() {

return typeId;

}

public static PersonType findByTypeId(int typeId) {

for (PersonType type : values()) {

if (type.typeId == typeId) {

return type;

}

}

return null;

}

}

对我来说,这通常与数据库中的查找表一致(仅适用于很少更新的表).

但是,当我尝试findByTypeId在switch语句中使用时(很可能是用户输入)......

int userInput = 3;

PersonType personType = PersonType.findByTypeId(userInput);

switch(personType) {

case COOL_GUY:

// Do things only a cool guy would do.

break;

case JERK:

// Push back. Don't enable him.

break;

default:

// I don't know or care what to do with this mess.

}

......正如其他人所说,这导致了NPE @ switch(personType) {.我开始实现的一种解决方法(即"解决方案")是添加一种UNKNOWN(-1)类型.

public enum PersonType {

UNKNOWN(-1),

COOL_GUY(1),

JERK(2);

...

public static PersonType findByTypeId(int id) {

...

return UNKNOWN;

}

}

现在,您不必在重要位置进行空值检查,您可以选择或不选择处理UNKNOWN类型.(注意:-1在业务场景中是一个不太可能的标识符,但显然选择对您的用例有意义的东西).

`UNKNOWN`是我见过的最好的解决方案,并且过度使用了nullchecks. (2认同)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值