我不愿使用开关,但是我看到的开关将在Java 12
中得到改善Java 12将开关表达式添加为实验特征。Java 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
通常是 * *犯了设计错误的指标。我宁愿努力思考如何避免切换,而不是想知道如何从开关返回值。
一些示例
java中的if语句的长列表
如何避免Java中的开关语句
将许多"如果其他"陈述转换为清洁方法
具有多个出口的方法很难进行调试,并且很难阅读。
对于具有很多 break
s的方法也是如此 - 如果您选择"局部变量方法",这就是您要做的。
我认为,这些都不是
// 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,可以在没有临时变量和中断的情况下使用开关?
这是什么意思?:)不,截止日期是明天,您必须与现在所拥有的一切一起工作。
*我没有低估开关的有用性。例如,当您以低级别编程或编写优化时,它可能会派上用场。
我只是说在现实世界中, springs 和 hibernates 在模式的世界中,开关是过时的。
,但我找到了一个旧但高级的答案,说避免了多个返回语句:
将值分配给本地变量,然后在结束被认为是一个好习惯。有多个出口的方法是很难调试,很难阅读。
所以我想知道,由于切换更改,该答案仍然相关吗?
这是一个常见的误解,它起源于"单一条目,单一出口"。(第24页(所有这些都源自另一个时代,它导致结构化的编程语言,最终导致面向对象的编程语言(例如Java(。
不必担心多个return
语句,没有任何问题。