gpt4 book ai didi

java - (如何)是否可以捕获 Java 三元运算符语句中的异常?

转载 作者:行者123 更新时间:2023-12-02 14:10:18 24 4
gpt4 key购买 nike

我正在重新格式化一些我不完全理解的遗留代码,其中有几个变量赋值,它们有条件地将变量分配给两个格式化函数之一的输出,使用异常捕获,如下所示:

String myString;
try {
myString= foo(x);
} catch (Exception e) {
myString= bar(x);
}

这似乎是对异常处理的滥用,而且无论如何,它是用于大量变量分配的大量重复样板代码。如果不深入研究 foo 来识别可能导致异常的条件,我可以使用三元运算符表达式来简化它吗? IE。像这样的东西:

String myString = foo(x) ? foo(x) : bar(x)

但是捕获foo(x)可能引发的异常。有没有办法在这一行中做到这一点?或者如果没有,是否有更好的单行表达式可以根据可能的异常在两个赋值之间进行选择?我正在使用 Java 8。

最佳答案

可以使用惰性求值,如下所示:

String myString = attempt(() -> foo(x), () -> bar(x));

public static <T> T attempt(Supplier<T> a, Supplier<T> b) {
try {
return a.get();
} catch (Exception e) {
return b.get();
}
}

这并不好,只是整个重构中的一个阶段。

您看到的此类构造的一种模式是可能抛出 IOException 的进程的结果消息。

当数据是可选的时,丑陋的模式将是 NullPointerException 等。然后使用 Optional.ofNullable.map 进行更复杂的重新设计到另一个 Optional 可能是可行的。

简而言之,我没有看到一个干净的方法。

关于java - (如何)是否可以捕获 Java 三元运算符语句中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56565950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com