首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >何时抛出异常

何时抛出异常
EN

Stack Overflow用户
提问于 2019-01-07 07:56:30
回答 1查看 43关注 0票数 0

我对此进行了搜索,偶然发现了this question。最上面的答案很有帮助,但我想要一些澄清,并且没有足够的声誉来发表评论,所以我为它创建了一个新的问题。

基本上,用户"The Digital Gabeg“声明,当代码的预设不满足时,抛出一个错误。给出的示例是,如果一个方法的List<>长度超过50,则返回true,否则返回false。但是,如果传递给方法的对象不是长度,方法就不能准确地返回true或false,所以它不会返回任何东西,而是抛出一个错误(尽管严格地说,这个逻辑并不是很准确,如果一个对象不是具有成员的对象类型(例如,List<>或数组),那么它的长度仍然是false,因为为了使长度超过50,它首先需要有一个为对象定义的“List<>”)。

本例中最明显的漏洞是,将方法的参数指定为List<>甚至可以避免将任何其他内容传递给该方法。不过,这并不是我真正的问题。为了便于讨论,我们假设无论出于什么原因,您都不能确保传递给该方法的对象在编译时是一个整数-即使是这样,也可以通过将该方法的返回类型从布尔值更改为List<>并指定返回值0表示false、1表示true和-1表示其他任何值来解决这类问题。这可能是对值的任意赋值,但它可以处理这种情况,而无需抛出异常。您甚至可以让它返回-1、0和1以外的其他值来表示其他内容。例如,如果传递的是数组而不是List<>,则可以使用值2和3表示true和false,但需要注意的是,虽然所提供的对象有(或没有)超过50个成员,但传递的对象并不是严格意义上的List<>....as,因为文档和/或注释中提供了此类内容。

所以我猜我的问题是,既然答案的前提是当他们试图做的事情背后的假设被破坏时,就应该抛出异常,从技术上讲,提供的示例有一个解决方案,如果可以找到这些解决方案,是比抛出异常更可取,还是抛出异常更可取,如果这取决于情况,决定因素是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-07 08:33:17

在你描述的情况下,抛出一个错误绝对是更好的选择。当使用一个函数时,我们假设

boolean x = listBigEnough(list)

我们可以假设函数是如何工作的。如果我们有

代码语言:javascript
复制
int x = listBigEnough(list)

我们不知道x代表什么。我们需要向列表中添加多少个元素才能使其足够大?x=-3是什么意思?也许我们假设1=true 0=false并这样做

代码语言:javascript
复制
if x==0 {
//increase size of list
} else {
//continue as usual
}

但是,如果出现错误并且listBigEnough返回-1,会发生什么呢?

如果程序崩溃是因为listBigEnough的作者抛出了一个错误,我们知道如何修复我们的代码。此外,错误并不总是使程序崩溃,我们可以捕获错误

代码语言:javascript
复制
list = //user input
try {
  if listBigEnough(list) {
    //do thing
  } else {
   //tell user to get larger list
  }
} catch (NotAListError) {
// tell user to give a list
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54067030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档