Java 如何决定函数应该返回错误还是生成异常?
库和API有时返回-1或null以指示错误 在其他情况下,它们会生成异常Java 如何决定函数应该返回错误还是生成异常?,java,Java,库和API有时返回-1或null以指示错误 在其他情况下,它们会生成异常 如果我必须编写自己的函数,我应该在什么时候使用返回值来指示错误,什么时候出现异常?通常当某个方法返回值时,这是因为它是一个由其他方法调用的内部方法,并且在用户可以访问时生成异常。您可以处理此异常,并且不会向用户显示错误。通常当某个方法返回值时,这是因为这是一个由其他人调用的内部方法,并在用户可以访问时生成异常。您可以处理此异常,并且不会向用户显示错误。编辑:我无意中进入了java land。。这个答案的代码是c#。。对不起
如果我必须编写自己的函数,我应该在什么时候使用返回值来指示错误,什么时候出现异常?通常当某个方法返回值时,这是因为它是一个由其他方法调用的内部方法,并且在用户可以访问时生成异常。您可以处理此异常,并且不会向用户显示错误。通常当某个方法返回值时,这是因为这是一个由其他人调用的内部方法,并在用户可以访问时生成异常。您可以处理此异常,并且不会向用户显示错误。编辑:我无意中进入了java land。。这个答案的代码是c#。。对不起 异常是昂贵的(它们使您的程序变慢),所以它们应该只用于真正特殊的情况。我的做法是,大多数时候,我只在我的私有函数中返回-1,因为它们不需要像其他函数那样严格的文档。如果经常出现错误,那么使用格式
bool TrySomething(in,out result)
的函数也是一个不错的约定
然后,客户机可以执行以下操作:
if(TrySomething(in, out result))
handle(result);
else
//failed Something
如果这不实用,那么通常异常会更安全,因为它们不会给您任何无声错误(除非您使用空的
catch
块处理异常)。编辑:我无意中进入了java领域。。这个答案的代码是c#。。对不起
异常是昂贵的(它们使您的程序变慢),所以它们应该只用于真正特殊的情况。我的做法是,大多数时候,我只在我的私有函数中返回-1,因为它们不需要像其他函数那样严格的文档。如果经常出现错误,那么使用格式bool TrySomething(in,out result)
的函数也是一个不错的约定
然后,客户机可以执行以下操作:
if(TrySomething(in, out result))
handle(result);
else
//failed Something
如果这不实用,那么通常异常会更安全,因为它们不会给您任何静默错误(除非您使用空的
catch
块处理异常)。如果使用String.indexOf(…)
,您将看到它返回-1,但这不是错误。在查询数据库时也是如此,如果没有找到所需内容,则返回null
但是对于真正的错误,真正的问题,最好抛出一个异常。如果使用
String.indexOf(…)
,您将看到它返回-1,但这不是一个错误。在查询数据库时也是如此,如果没有找到所需内容,则返回null
但是对于真正的错误,真正的问题,最好抛出一个异常。如果它真的是一个错误(函数未能完成它应该做的事情,因为一些内部意外错误或因为参数违反了一些约束),那么你应该抛出一个异常-这就是异常的用途
例如,对于“查找给定字符串中子字符串的位置”之类的内容,可以返回null
或-1表示“未找到”。但这不是一个错误,这是正确的和预期的(“非异常”)行为。如果它确实是一个错误(函数未能完成它应该做的事情,因为一些内部意外错误或参数违反了某些约束),那么您应该抛出一个异常-这就是异常的用途
例如,对于“查找给定字符串中子字符串的位置”之类的内容,可以返回
null
或-1表示“未找到”。但这不是一个错误,这是正确的和预期的(“非异常”)行为。异常会向开发人员(有时是您自己,通常是其他人)传达特定方法或函数的意思:
我不能处理这个问题,这是别人的责任
例如,如果您的方法正在解析一个字符串并返回一个int,那么如果传递一个类似“xyzy”的字符串,它是否应该返回-1
否,-1将是错误的返回错误值,因为“-1”是表示合法int的合法字符串
这里是一个希望解析方法抛出异常的例子。调用方法必须处理解析异常。您(和未来的)开发人员会明白,处理解析错误是调用方的责任
编辑:在这种特殊情况下,您可以让函数返回一个整数而不是int。然后您可能会有一个协定,null(对整数有效但对int无效)将表示某种错误。但由于null是一个单一值,因此调用程序将无法区分字符串是不可解析(“xyzzy”)还是太大而无法表示(“2147483648”)。异常会向开发人员(有时是您自己,通常是其他人)传达特定方法或函数的信息: 我不能处理这个问题,这是别人的责任 例如,如果您的方法正在解析一个字符串并返回一个int,那么如果传递一个类似“xyzy”的字符串,它是否应该返回-1 否,-1将是错误的返回错误值,因为“-1”是表示合法int的合法字符串 这里是一个希望解析方法抛出异常的例子。调用方法必须处理解析异常。您(和未来的)开发人员会明白,处理解析错误是调用方的责任 编辑:在这种特殊情况下,您可以让函数返回一个整数而不是int。然后您可能会有一个协定,null(对整数有效但对int无效)将表示某种错误。但是,因为null是一个值,所以调用程序将无法区分字符串是不可解析(“xyzy”)还是太大而无法解析