要求用户从某个给定的集合中选择一个ID。我检查这个ID是否存在于我的集合中,如果不存在,我抛出IndexOutOfBoundsException
并稍后捕获它。我真的可以将该异常用于这样的目的吗?或者这只是一种非常糟糕的做法?
发布于 2012-09-04 05:06:26
如果你面临非常特殊的情况,抛出异常确实有意义。
如果你的类的契约假设用户永远不会查询不在集合中的值,那么异常是好的。也许是IllegalArgumentException或者类似这样的东西。
否则,它会导致样板代码,有时还会因为堆栈展开和异常传播而导致性能显著下降
因此是抛出异常还是返回某个预定义值,这是一种权衡
我建议在您的情况下返回"null“。
发布于 2012-09-04 05:06:01
如果将ID
作为参数传递给方法,并且您希望将其作为pre-post条件的一部分进行检查,则可以抛出IllegalArgumentException
或RuntimeException
。
IndexOutOfBounds
没有意义,因为它在这里是令人困惑的。这是在进行越界访问时引发的异常。
发布于 2012-09-04 05:10:39
就我个人而言,我会抛出一个检查过的异常,这样调用方法就会被强制捕获它。你能做的就是调用
initCause
,并将其设置为IllegalArgumentException。
例如
public method(int i) throws MyException {
if (i < 0) {
MyException e = new MyException();
e.initCause(new IllegalArugmentException());
throw e;
}
}
我可能还会调用正确的corectors来传递消息,当异常被抛出时,已经发生了什么是很清楚的。
https://stackoverflow.com/questions/12253980
复制相似问题