首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >异常抛出-用法

异常抛出-用法
EN

Stack Overflow用户
提问于 2012-09-04 05:02:52
回答 5查看 65关注 0票数 0

要求用户从某个给定的集合中选择一个ID。我检查这个ID是否存在于我的集合中,如果不存在,我抛出IndexOutOfBoundsException并稍后捕获它。我真的可以将该异常用于这样的目的吗?或者这只是一种非常糟糕的做法?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-04 05:06:26

如果你面临非常特殊的情况,抛出异常确实有意义。

如果你的类的契约假设用户永远不会查询不在集合中的值,那么异常是好的。也许是IllegalArgumentException或者类似这样的东西。

否则,它会导致样板代码,有时还会因为堆栈展开和异常传播而导致性能显著下降

因此是抛出异常还是返回某个预定义值,这是一种权衡

我建议在您的情况下返回"null“。

票数 1
EN

Stack Overflow用户

发布于 2012-09-04 05:06:01

如果将ID作为参数传递给方法,并且您希望将其作为pre-post条件的一部分进行检查,则可以抛出IllegalArgumentExceptionRuntimeException

IndexOutOfBounds没有意义,因为它在这里是令人困惑的。这是在进行越界访问时引发的异常。

票数 2
EN

Stack Overflow用户

发布于 2012-09-04 05:10:39

就我个人而言,我会抛出一个检查过的异常,这样调用方法就会被强制捕获它。你能做的就是调用

代码语言:javascript
运行
复制
initCause

,并将其设置为IllegalArgumentException。

例如

代码语言:javascript
运行
复制
public method(int i) throws MyException {
    if (i < 0) {
       MyException e = new MyException();
       e.initCause(new IllegalArugmentException());
       throw e;
    }
}

我可能还会调用正确的corectors来传递消息,当异常被抛出时,已经发生了什么是很清楚的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12253980

复制
相关文章

相似问题

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