java 返回一个值并抛出异常?

bqjvbblv  于 2023-01-29  发布在  Java
关注(0)|答案(4)|浏览(198)

我正在使用一个API,它声称如果成功返回true,如果失败返回false。但是,它也声称如果失败抛出不同的异常。它怎么能返回false并抛出异常呢?

wh6knrhe

wh6knrhe1#

不可能在一次函数调用中既抛出异常又返回值。
它可能会在出现错误时返回false,但在输入无效时抛出异常。
edit:PaulPRO发布了一个(现在已删除)答案,指出在当前线程中返回值时,在不同线程中引发异常在技术上是可能的。我认为这值得注意,即使您不应该看到它。

wmtdaxz3

wmtdaxz32#

你可以抛出一个 * 有 * 一个值(这里是布尔值)的异常:

public class ValueException extends Exception {
    final boolean value;

    public ValueException(boolean value, String message) {
        super(message);
        this.value = value;
    }

    public boolean getValue() {
        return value;   
    }
}
mklgxw1f

mklgxw1f3#

虽然可以用这样一种方式编写代码,即可以从函数调用中派生出异常和值(参见上面的帖子),但决不能用正确的编码来完成。
我很想看到这个API文档的链接。API应该优先考虑清晰度。抛出异常并返回值会留下一个问题,即返回的值是否可以安全使用,或者它是否无效。
记住,try/catch块是处理异常的OTHER方法,它们不会将异常传递给调用方法,而是以开发人员认为合适的方式在内部处理异常。
如果出于调试的目的,您需要查看异常情况下的结果值,那么Bohemian的想法非常有效。

4smxwvx5

4smxwvx54#

虽然这个问题很老了,但我找到了一个库,它可以做到这一点。需要注意的是,这种情况并不常见,而且可能会误导向error对象添加值。这个库将这种行为 Package 在引擎盖之下,所以你不需要自己做,也不需要给其他处理你代码的人带来困惑:https://github.com/bacloud23/eager_return_js
它是在JavaScript中实现的,但同样的实现也可以在Java中实现。

相关问题