0

您好,我正在通过用 Java 编写一个虚拟库管理项目来学习 OOP。

在 serachBook() 中,如果在 ArrayList 中找到 book,则返回 book 对象,如果找不到则抛出自定义异常 BookNotFound。

问题1:它应该只是返回null并在调用代码时检查返回值是否为null或抛出自定义异常BookNotFound。

目前我认为 BookNotFound 是合适的,目前正在这样做。但是我发现了另一个困难:在 addbook() 中,我首先调用 searchBook() 来查看 book 已经存在,如果不存在,它会添加这本书。但是,如果书不存在,searchBook() 会抛出 BookNotFound。

Qestion 2:我应该如何处理 addBook() 中 searchBook() 抛出的这个异常,因为为了 addBook() 在列表中插入书籍,必须发生 BookNotFound 异常。那么我应该写空 Catch(BookNotFound e){} 吗?

什么是更好的 OO 实践?

4

5 回答 5

3

null如果找不到书,您应该返回并在方法文档中说明,

Exception投掷是一项昂贵的操作searchBook(),它也非常适合特殊情况(比如你在方法中传递 null 的书名

于 2013-01-01T06:45:19.817 回答
2

返回null

使用异常来控制程序流是一个非常糟糕的主意。例外是例外,没有找到的书不是例外。

当您的方法无法处理某种情况并希望向调用者发出信号时,就会引发异常。您可以通过返回来处理它null

有很多 JDK 类null在类似情况下返回的示例,例如在映射中找不到键时Map.get(key)返回。null

于 2013-01-01T06:56:50.233 回答
0

如果找不到这本书,我的建议是选择返回“null”的选项。仅使用例外来处理“不那么常​​规”的场景,并且从您的描述中“搜索书”和“添加书”看起来像一个相当常见的场景。

使用异常涉及开销:
Java 异常有多慢?
http://apmblog.compuware.com/2011/04/12/the-cost-of-an-exception/

于 2013-01-01T06:48:11.950 回答
0

问题1:
例外应该是针对例外情况。
书不存在似乎不是一个例外情况,因此返回特殊值null会更合适。
http://codeutopia.net/blog/2010/03/11/should-a-failed-function-return-a-value-or-throw-an-exception/

问题2:
也永远不要吃掉异常。
相反,您可以编写代码以在 catch 块中添加 book 并执行一些有用的操作,例如日志记录。

于 2013-01-01T06:48:48.383 回答
0

相反,您应该返回一个nullif Bookis not found 并相应地处理它。

抛出异常是昂贵的操作,顾名思义,这些是异常情况。因此,在控制应用程序流的上下文中使用它们确实被认为是一种不好的做法。

此外,使用异常进行流控制违反了最小惊讶原则,这使得程序难以阅读和理解。

此外,编译器供应商并不期望这一点。他们期望很少抛出异常,并且他们通常让抛出代码效率很低。

于 2013-01-01T06:54:32.133 回答