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

问题描述 投票:0回答:2

给定以下代码:

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}

.

但是我不会检查状态是否是例如4(必须导致异常)。

我尝试了一些解决方案,比如包含,但代码没有改进。

有什么我可以尝试的想法吗?

java list exception switch-statement contains
2个回答
0
投票

我建议在这种情况下使用地图。

有点像

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);
} 

0
投票

你已经拥有的没有错。但是,如果您使用的是 Java12 或更高版本,则可以使用 Java 12 中引入的 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!");
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.