我个人认为,省略if-else语句中的花括号是不对的,并且我非常清楚为什么要避免这样做。
但是现在我遇到了一个有趣的用例,示例代码如下:
public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E {
Objects.requireNonNull(exceptionSupplier);
if (result) return;
throw exceptionSupplier.get();
}
我认为这段代码非常简洁,以下将展示其他变体。同时该代码不容易出现添加一行代码更改逻辑的问题。
我个人会将其设定成一个规则,仅在控制流语句中使用它,实际上指的是return、break和continue。
下面展示了该代码的两个替代版本。 替代方案一:
public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E {
Objects.requireNonNull(exceptionSupplier);
if (result) {
return;
}
throw exceptionSupplier.get();
}
方案2
public <E extends RuntimeException> void throwOnFail(final boolean result, final Supplier<E> exceptionSupplier) throws E {
Objects.requireNonNull(exceptionSupplier);
if (!result) {
throw exceptionSupplier.get();
}
}
我认为它们都使代码看起来更加复杂,没有任何明显的原因。
if (!result) throw ..
(即使只有1行),因为这与预期的行为相符。 - zapl