我有一个类应该包装在某些输入文件中找到的字符串。契约(Contract)是该文件包含多个条目(由 # 个字符分隔),准确地说:至少两个条目应来自该文件。
现在我可以这样做:
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);
第二部分会在某个时刻抛出 ArrayIndexOutOfBound。
我的问题是:Java 标准库中是否有一些可以被视为指导的先例? (类似于 Java 标准库调用 requireNonNull()
,它告诉我们可能更愿意针对空参数抛出 NPE 而不是 IllegalArgumentException )。
注意:我不是问“什么会更好”,双方都有各自的优点和缺点(我有点倾向于选择选项 1,因为它更短)。
最佳答案
#1 有很多先例。
例如,ArrayList
执行自己的显式边界检查并抛出 IndexOutOfBoundsException
以及描述性消息(包括有问题的索引和数组大小),而不是让底层的数组访问因自身异常而失败(在本例中,该异常恰好是 IndexOutOfBoundsException 的子类,但这不是重点)。
在大多数情况下,我个人会选择#1 而不是#2,主要是因为它允许我更明确并提供清晰的(呃)异常消息。
关于java - 验证列表: prefer explicit IllegalArgumentException over automatic ArrayIndexOutOfBounds?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58318252/