Java 开关用例

Java switch use case

我舍不得用开关,但是我看到了switch will be improved in Java 12

Java 12 added the switch expression as an experimental feature. A Java switch expression is a switch statement which can return a value.

我发现(在 Java 12 之前)switch 可能有用的唯一用例是 return 从一组小的封闭案例中获取不同的值,例如:

    switch (input) {
    case "A":
        return "1";
    case "B":
        return "2";
    default:
        return "0";
    }

或者在Java12的例子中:

return
switch(digitInDecimal){
    case  0 -> '0';
    case  1 -> '1';
    case  2 -> '2';
    default -> '?';

但我发现了一个古老但排名靠前的 answer 说要避免多个 return 语句:

Assigning a value to a local variable and then returning that at the end is considered a good practice. Methods having multiple exits are harder to debug and can be difficult to read.

所以我想知道,由于开关更改,该答案是否仍然相关?

我必须等待 Java 12 switch 可以在没有临时变量和中断的情况下使用吗?

Assigning a value to a local variable and then returning that at the end is considered a good practice.

我不知道什么时候它被认为是一种好的做法。对我来说,switch 通常是 * 表明存在设计错误的指标。我宁愿把我的精力放在思考如何避免 switch 而不是想知道如何 return 来自 switch 的值。

几个例子

Long list of if statements in Java

Converting many 'if else' statements to a cleaner approach

Methods having multiple exits are harder to debug and can be difficult to read.

具有很多 break 的方法也是如此 - 如果您选择 "local-variable approach".

,这就是您要做的事情

在我看来,none 个

// 1
switch (input) {
    case "A":
        return "1";
    case "B":
        return "2";
    default:
        return "0";
}

// 2
String varibleToReturn = null;
switch (input) {
    case "A":
        varibleToReturn = "1";
        break;
    case "B":
        varibleToReturn = "2";
        break;
    default:
        varibleToReturn = "0";
}
return varibleToReturn;

// 3
return switch(digitInDecimal) {
    case  0 -> '0';
    case  1 -> '1';
    case  2 -> '2';
    default -> '?';
}

产生显着差异,或略有改善。是的,Java-12 的 switch 会更加简洁和表现力,但基本思想保持不变。

Must I wait for Java 12 where switch can be used without temporary variables and breaks?

这是什么意思? :) 不,截止日期是明天,你必须利用你现在手头的东西。


*我并没有低估switch的用处。它可能会派上用场,例如,当您在低级别编程或编写优化时。

我只是说在现实世界中,有了 SpringsHibernates,在模式的世界里,switch 已经过时了.