gpt4 book ai didi

java - 验证列表 : prefer explicit IllegalArgumentException over automatic ArrayIndexOutOfBounds?

转载 作者:行者123 更新时间:2023-11-30 06:40:23 25 4
gpt4 key购买 nike

我有一个类应该环绕在某些输入文件中找到的字符串。约定是此文件包含多个条目(由 # 个字符分隔),准确地说:至少两个条目应该来自该文件。

现在我可以这样做了:

public MyWrapper(List<String> fileEntries) {
if (fileEntries.size() < 2) {
throw new IllegalArgumentException("Not enough entries ...
}

或者我可以这样做:

public MyWrapper(List<String> fileEntries) {
this.firstEntry = fileEntries.get(0);
this.secondEntry = someMethodThatMergesAllRemainingEntries(fileEntries);

第二 block 会在某个时候抛出 ArrayIndexOutOfBound。

我的问题是:在 Java 标准库中是否有一些先例可以被视为指南? (类似于 Java 标准库调用 requireNonNull(),它告诉我们可能更愿意为空参数抛出 NPE 而不是 IllegalArgumentException)。

注意:我不是问“什么会更好”,双方各有利弊(我有点倾向于选择选项 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,主要是因为它允许我更明确并提供清晰(更)的异常消息。

关于java - 验证列表 : prefer explicit IllegalArgumentException over automatic ArrayIndexOutOfBounds?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58318252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com