繁体   English   中英

Java交换机用例

[英]Java switch use case

我不愿意使用交换机,但我看到交换机将在Java 12中得到改进

Java 12将switch表达式添加为实验性功能。 Java switch表达式是一个可以返回值的switch语句。

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

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

或者在Java 12示例中:

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

但我找到了一个旧的但排名很高的答案 ,该答案表示要避免多个退货声明:

将值赋给局部变量然后在末尾返回它被认为是一种很好的做法。 具有多个出口的方法难以调试并且难以阅读。

所以我想知道,由于交换机的变化,这个答案是否仍然相关?

我必须等待Java 12,其中可以使用switch而无需临时变量和中断吗?

将值赋给局部变量然后在末尾返回它被认为是一种很好的做法。

我不知道什么时候它被认为是一个好习惯。 对我来说, switch 通常是指示设计错误的指示。 我宁愿花费精力去思考如何避免切换而不是想知道如何从交换机返回一个值。

几个例子

Java中if语句的长列表
如何避免Java中的switch-case语句
将许多“if else”语句转换为更清晰的方法

具有多个出口的方法难以调试并且难以阅读。

对于具有大量break的方法也是如此 - 如果您选择“局部变量方法”,那就是您要做的事情。

在我看来,这些都不是

// 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的转换会提供更简洁和表达,但基本思想保持不变。

我必须等待Java 12,其中可以使用switch而无需临时变量和中断吗?

这是什么意思? :)不,截止日期是明天,你必须与你现在掌握的东西一起工作。


*我并没有低估开关的实用性。 它可能会派上用场,例如,当您在低级编程时,或者您编写优化时。

我只是说,在现实世界中,对于SpringsHibernates ,在一个模式的世界中,转换是过时的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM