开发者社区> 问答> 正文

验证列表:相对于自动ArrayIndexOutOfBounds,更喜欢显式的IllegalArgum

我有一个类,它的作用是将某些输入文件中的字符串封装起来。该文件包含多个条目(以# chars分隔),确切地说:该文件中至少应该有两个条目。

现在我可以这样做: public MyWrapper(List fileEntries) { if (fileEntries.size() < 2) { throw new IllegalArgumentException("Not enough entries ... } 或者我可以这样做: public MyWrapper(List fileEntries) { this.firstEntry = fileEntries.get(0); this.secondEntry = someMethodThatMergesAllRemainingEntries(fileEntries); 第二部分会在某个点抛出ArrayIndexOutOfBound。 我的问题是:在Java标准库中有没有可以被视为指导的先例?(类似于Java标准库调用requireNonNull(),它告诉我们,对于空参数,可能更喜欢抛出NPE而不是IllegalArgumentException)。

注意:我不是在问“什么更好”,双方各有利弊(我稍微倾向于选择选项1,因为它更简短)。

展开
收起
小六码奴 2019-10-10 18:45:11 875 0
1 条回答
写回答
取消 提交回答
  • #1有很多先例。

    例如,ArrayList执行其自己的显式边界检查并IndexOutOfBoundsException使用描述性消息(包括有问题的索引和数组大小)进行抛出,而不是让基础数组访问因其自身的异常而失败(在本示例中,该数组恰好是IndexOutOfBoundsException的子类)

    http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/ArrayList.java#l1200

    在大多数情况下,我个人会选择#1而不是#2,主要是因为它更加明确,并提供更清晰的异常消息。

    2019-10-10 18:47:10
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
《用管控策略设定多账号组织全局访问边界》 立即下载
建立联系方法之一 立即下载
继承与功能组合 立即下载