【发布时间】:2021-09-09 17:59:22
【问题描述】:
在 Java 8 中是否有更短的 if/throw else/return 语法? java.util.Optional 提供了一种在一个语句中完成此操作的方法,但它需要为每个具有非空引用的调用创建一个 Optional 实例。
这可以在一个语句中完成吗?
public static MyEnum fromString(String value) {
MyEnum result = enumMap.get(value);
if (result == null)
throw new IllegalArgumentException("Unsupported value: " + value);
return result;
}
可选示例(不好,每次都需要可选实例)
public static MyEnum fromString(String value) {
return Optional.ofNullable(enumMap.get(value)).orElseThrow(
() -> new IllegalArgumentException("Unsupported value: " + value));
}
【问题讨论】:
-
我会坚持你的第一个例子。它简单、清晰、简洁,只比需要我理解这个新的
Optional东西的示例多一行代码。 -
@JonathonReinhart 是的,实际上我同意你的看法。我在我的个人项目中经常遇到这种情况,这让我感到好奇。我是出于好奇而不是寻求技术优势。
-
您是否使用 Optional 对代码进行了基准测试? VM 确实逃脱了分析,因此它有时可以在堆栈上分配对象,这应该非常快。
-
在您的
Optionals 中加入Map不是更好吗? -
@Dirk Lachowski:对于
Map中不存在的键,Map<…,Optional<…>>仍会返回null。