我有这方面的痴迷使我的Java代码更简洁.当然有理由:我在一个屏幕上看得越多,就越容易遵循逻辑.
例如,在分配值时,可能会写:
String result;
if (arg != null) {
result = arg.toString();
} else {
result = "default";
}
Run Code Online (Sandbox Code Playgroud)
但当然这要短得多:
String result = (arg != null) ? arg.toString() : "default";
Run Code Online (Sandbox Code Playgroud)
但是,对于非布尔条件(即超过2个选项),仍然会使用该switch语句,例如:
SimpleDateFormat format;
switch (dateOrder) {
case DMY :
format = new SimpleDateFormat("{2}" + sep + "{1}" + sep + "{0}");
break;
case MDY :
format = new SimpleDateFormat("{1}" + sep + "{2}" + sep + "{0}");
break;
case YMD :
format = new SimpleDateFormat("{0}" + sep + "{1}" + sep + "{2}");
break;
default :
format = null;
}
Run Code Online (Sandbox Code Playgroud)
我提出了一个实用程序类,它使用泛型,lambdas和链接范例来提供如下语法:
SimpleDateFormat format = Multary.<DateOrderEnum, SimpleDateFormat>nSwitch(dateOrder)
.nCase(DateOrderEnum.DMY, () -> new SimpleDateFormat("{2}" + sep + "{1}" + sep + "{0}"))
.nCase(DateOrderEnum.MDY, () -> new SimpleDateFormat("{1}" + sep + "{2}" + sep + "{0}"))
.nCase(DateOrderEnum.YMD, () -> new SimpleDateFormat("{0}" + sep + "{1}" + sep + "{2}"))
.nDefault(() -> null)
.result();
Run Code Online (Sandbox Code Playgroud)
(该类本身很容易实现,因此我不会厌恶读者的代码.)
我的问题是:
Map内部而不是语言构造,可能效率低下;switch用enum) -问题(包括"没有合适的情况下,以及没有提供默认情况")可以只在运行时被检测到,以被抛出一个合适的异常;case- 每个nCase()调用只使用一个常量(虽然这可以通过一些更多的代码来改善...这可能会使语法更混乱);您始终可以链接三向条件运算符:
SimpleDateFormat format =
dateOrder == DMY ?
new SimpleDateFormat("{2}" + sep + "{1}" + sep + "{0}")) :
dateOrder == MDY ?
new SimpleDateFormat("{1}" + sep + "{2}" + sep + "{0}")) :
dateOrder == YMD ?
new SimpleDateFormat("{0}" + sep + "{1}" + sep + "{2}")) :
null;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |