java异常抛出用法
要求用户从某个给定集合中选择一个ID。我检查该ID是否存在于我的集合中,如果不存在,我抛出IndexOutOfBoundsException
,然后捕获它。我真的可以使用这个例外来达到这样的目的吗?还是这只是一个非常糟糕的做法
你可以在下面搜索框中键入要查询的问题!
要求用户从某个给定集合中选择一个ID。我检查该ID是否存在于我的集合中,如果不存在,我抛出IndexOutOfBoundsException
,然后捕获它。我真的可以使用这个例外来达到这样的目的吗?还是这只是一个非常糟糕的做法
# 1 楼答案
如果将
ID
作为参数传递给一个方法,并且您希望将其作为前置后置条件的一部分进行检查,则可以抛出IllegalArgumentException
或RuntimeException
IndexOutOfBounds
没有意义,因为这里很混乱。这是在执行越界访问时引发的异常# 2 楼答案
如果你面临非常特殊的情况,抛出异常确实是有意义的
如果类的契约假设用户永远不会查询不在集合中的值,那么异常是好的。也许是IllegalArgumentException之类的
否则,它会导致样板代码,有时还会由于堆栈展开和异常传播而导致性能显著降低
所以,抛出异常还是返回一些预定义值是一种折衷
我建议在你的情况下返回“null”
# 3 楼答案
如果调用对
23
有效,而调用对47
有效,同时没有任何变化,那么它对35
无效的原因不可能是索引超出了范围# 4 楼答案
取决于上下文,但在我看来,如果你在查找一个ID,一个与位置引用无关的概念,这将是对特定异常的滥用——可能是特定于应用程序的ItemNotFound或等效项
如果API有一个约定,指定返回有效对象或抛出异常,然后抛出异常。如果有意义的话,也要考虑一个nulLoopDip模式。
# 5 楼答案
就我个人而言,我会抛出一个checked异常,这样调用方法就必须捕获它。你能做的就是打电话
并将其设置为IllegalArgumentException
比如
我可能还会调用正确的corecotor,以便在抛出异常时向它传递消息,很明显发生了什么