gpt4 book ai didi

java - 绕过 java 的 try/catch 并保持代码干净而不返回 null

转载 作者:行者123 更新时间:2023-11-29 06:42:36 27 4
gpt4 key购买 nike

我有这段代码:

private void myFunc(){
obj = doSomething();
//If value is found, doX()
//If value is not found, doY()
}

private obj doSomething(){
//Do some stuff
//Hit database to get some value
obj = db.getValue(); //This func throws an exception if no value is found
}

现在,我的问题是:
1. 我应该怎么做:doSomething() throws ValueNotFoundException 并在 myFunc() 中捕获它
2. 或者在 doSomething() 中捕获它并返回 null? (虽然这是一种非常糟糕的方法)。然后在 myFunc() 中检查是否为 null

更新:
1. Value not found 是很可能的事情,不是错误。

最佳答案

那么,未找到值异常(表示错误)还是可能?如果 doSomething() 绝对不可能找不到它需要的东西,那么这是一个错误。我想 myFunc() 不是处理此类错误的正确位置。

如果 doSomething() 有时找不到这个或那个(因为输入不正确、配置错误等),那么它应该抛出异常并让客户端处理这种预期的情况。然而 null 并不是最好的返回值。相反考虑 设计模式或一些包装器,如 Scala 中的 Option[T]

这是 InputStream 不简单地抛出 EOFException 的原因之一。当它到达文件末尾时。这并非意外情况。

在 Java 中,我尝试遵循一些技术/命名约定来使 null 更加明显:

private Obj tryReturningSomething()
private Obj returnSomethingOrNull()

此外,您始终可以使用 JavaDoc 来记录可能的返回值。我同意返回 null 不是最好的方法(例如,当方法返回一个集合时,我总是返回一个空的集合而不是 null)但在你的情况下它仍然比抛出一个异常被上面的一个堆栈帧捕获。这很浪费,更难维护和阅读。考虑有两个版本 - 一个返回 null 和一个抛出异常,包装第一个。

异常处理的发明是为了处理错误,而不是为了控制程序流程。

关于java - 绕过 java 的 try/catch 并保持代码干净而不返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775471/

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