如何确定函数是应该返回错误还是生成异常?

时间:2013-04-23 15:02:09

标签: java

库和API有时会返回-1或null以指示错误。

在其他情况下,它们会产生异常。

如果我必须编写自己的函数,何时应该使用返回值来指示错误以及何时发生异常?

5 个答案:

答案 0 :(得分:4)

如果您使用String.indexOf(...),您会看到它返回-1,但这不是错误。在咨询数据库时也是如此,如果您找不到所需内容,则返回null。

但是对于真正的错误,真正的问题,抛出异常会更好。

答案 1 :(得分:0)

通常当某个方法返回一个值时,它是因为是anothers调用的内部方法,当用户可以访问它们时会产生异常,你可以处理这个异常并且不向用户显示错误。

答案 2 :(得分:0)

编辑:我冒昧地冒险进入java-land ..这个答案的代码是c#..对不起

例外是昂贵的(它们使你的程序变慢),因此它们应该仅用于非常特殊的情况。我的做法是,大部分时间,我只在我的私人函数中返回-1,因为它们不需要像其他人那样严格的文档。如果错误经常出现,那么使用格式bool TrySomething(in, out result)的函数也是一个很好的约定。

然后客户端可以

if(TrySomething(in, out result))
    handle(result);
else
    //failed Something

如果这不可行,那么通常异常会更安全,因为它们不会给你任何静默错误(除非你用空catch块处理异常)。

答案 3 :(得分:0)

如果它真的是一个错误(函数未能按照它应该做的那样做,因为一些内部意外错误或者因为参数违反了某些约束)那么你应该抛出异常 - 这就是异常的用途。

例如,您可以返回null或-1,例如“查找给定字符串中子字符串的位置”以表示“未找到”。但这不是错误,这是正确的和预期的(“非例外”)行为。

答案 4 :(得分:0)

异常与开发人员(有时是你自己,通常是其他人)沟通特定方法或功能所说的:

  

我无法解决问题,这是别人的责任。

例如,如果你的方法正在解析一个字符串并返回一个int,如果它传递了一个像“xyzzy”这样的字符串,它应该返回-1吗?

不,-1将返回错误的错误值,因为“-1”是表示合法int的合法字符串。

以下是您希望解析方法抛出异常的情况。调用方法必须处理解析异常。您(和将来)的开发人员会理解调用者负责处理解析错误。

编辑:在这种特殊情况下,你可以让函数返回一个Integer而不是int。然后,您可能有一个null,它对Integer有效但对int无效,可能表示某种错误。但由于null是单个值,因此您的调用程序无法区分字符串是不可解析的(“xyzzy”)还是太大而无法表示(“2147483648”)。