java api设计 - NULL或Exception

sri*_*lla 17 java api

返回null值或从API方法抛出异常是否更好?

返回null需要全部进行丑陋的空检查,如果未选中返回则会导致严重的质量问题.

抛出异常会强制用户对错误条件进行编码,但由于Java异常冒泡并强制调用者代码处理它们,因此通常使用自定义异常可能是一个坏主意(特别是在java中).

有什么健全和实用的建议?

dan*_*ben 6

如果null是可接受的返回值(即,它可能来自有效输入而不是错误情况)则返回null; 否则抛出异常.

我完全不理解你的陈述,即检查异常可能是一个坏主意,因为调用者被迫处理它们 - 这是检查异常的全部要点.它可以防止在没有正确处理的情况下传播到代码中的错误情况.


kgr*_*rad 6

Josh Bloch建议返回空对象或"单元"对象来代替空值.查看Effective Java以获取大量有用的Java花絮.


Ada*_*ski 5

我认为答案完全取决于您的应用程序的上下文,以及您认为是"特殊情况"与程序员错误之间的关系.

例如,如果编写XML解析器,您可以选择实现以下方法:

/**
 * Returns first child element with matching element name or else
 * throws an exception.  Will never return null.
 */
Element getMandatoryChildElement(Element parent, String elementName)
throws MissingElementException;
Run Code Online (Sandbox Code Playgroud)

...因为这种方法允许您在单个逻辑块中实现消息解析代码,而无需在检索每个元素或属性后检查消息是否格式正确.