我正在使用一个API,它声称如果成功返回true,如果失败返回false。但是,它也声称如果失败抛出不同的异常。它怎么能返回false并抛出异常呢?
wh6knrhe1#
不可能在一次函数调用中既抛出异常又返回值。它可能会在出现错误时返回false,但在输入无效时抛出异常。edit:PaulPRO发布了一个(现在已删除)答案,指出在当前线程中返回值时,在不同线程中引发异常在技术上是可能的。我认为这值得注意,即使您不应该看到它。
false
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; } }
mklgxw1f3#
虽然可以用这样一种方式编写代码,即可以从函数调用中派生出异常和值(参见上面的帖子),但决不能用正确的编码来完成。我很想看到这个API文档的链接。API应该优先考虑清晰度。抛出异常并返回值会留下一个问题,即返回的值是否可以安全使用,或者它是否无效。记住,try/catch块是处理异常的OTHER方法,它们不会将异常传递给调用方法,而是以开发人员认为合适的方式在内部处理异常。如果出于调试的目的,您需要查看异常情况下的结果值,那么Bohemian的想法非常有效。
4smxwvx54#
虽然这个问题很老了,但我找到了一个库,它可以做到这一点。需要注意的是,这种情况并不常见,而且可能会误导向error对象添加值。这个库将这种行为 Package 在引擎盖之下,所以你不需要自己做,也不需要给其他处理你代码的人带来困惑:https://github.com/bacloud23/eager_return_js它是在JavaScript中实现的,但同样的实现也可以在Java中实现。
4条答案
按热度按时间wh6knrhe1#
不可能在一次函数调用中既抛出异常又返回值。
它可能会在出现错误时返回
false
,但在输入无效时抛出异常。edit:PaulPRO发布了一个(现在已删除)答案,指出在当前线程中返回值时,在不同线程中引发异常在技术上是可能的。我认为这值得注意,即使您不应该看到它。
wmtdaxz32#
你可以抛出一个 * 有 * 一个值(这里是布尔值)的异常:
mklgxw1f3#
虽然可以用这样一种方式编写代码,即可以从函数调用中派生出异常和值(参见上面的帖子),但决不能用正确的编码来完成。
我很想看到这个API文档的链接。API应该优先考虑清晰度。抛出异常并返回值会留下一个问题,即返回的值是否可以安全使用,或者它是否无效。
记住,try/catch块是处理异常的OTHER方法,它们不会将异常传递给调用方法,而是以开发人员认为合适的方式在内部处理异常。
如果出于调试的目的,您需要查看异常情况下的结果值,那么Bohemian的想法非常有效。
4smxwvx54#
虽然这个问题很老了,但我找到了一个库,它可以做到这一点。需要注意的是,这种情况并不常见,而且可能会误导向error对象添加值。这个库将这种行为 Package 在引擎盖之下,所以你不需要自己做,也不需要给其他处理你代码的人带来困惑:https://github.com/bacloud23/eager_return_js
它是在JavaScript中实现的,但同样的实现也可以在Java中实现。