java 如何改进返回true/false或抛出异常的switch case?

nnt7mjpx  于 2023-03-06  发布在  Java
关注(0)|答案(2)|浏览(151)

给定以下代码:

private boolean isBlahTrue(final BigDecimal status) {

        switch (status.intValue()) {

            case 1:
            case 2:
            case 3:
                return true;

            case 5:
            case 6:
            case 7:
                return false;

            default:
                throw new MyAppRuntimeException("Status unknown!");
        }
    }

我的问题是:这种做法是好是坏?
逻辑是:

1, 2, 3  --> true
5, 6, 7  --> false

但是不管怎样,你可以认为一个简单的IF也可以完成这些事情,比如

if (1,2,3) {true}, else {false}


但是我不会检查状态是否为e.g. 4(这必然导致异常)。
我尝试了一些解决方案,比如包含,但是代码没有改进。
我能试试看吗?

1cklez4t

1cklez4t1#

我建议在这种情况下使用Map。
比如

Map<Integer, Boolean> statusChecker = new HashMap<>();
statusChecker.put(1, true);
statusChecker.put(2, true);
... 
statusChecker.put(5, false);
...

现在你可以检查了

if(!statusChecker.contains(status)) {
   throw RuntimeException("invalid status");
} else {
   return statusChecker.get(status);
}
efzxgjgh

efzxgjgh2#

你已经拥有的没有什么问题,但是如果你使用的是Java12或更高版本,你可以使用Java12中引入的switch表达式:

private boolean isBlahTrue(final BigDecimal status) {
    return switch (status.intValue()){
        case 1, 2, 3 -> true;
        case 5, 6, 7 -> false;
        default -> throw new MyAppRuntimeException("Status unknown!");
    };
}

相关问题