我有一个类,它的作用是将某些输入文件中的字符串封装起来。该文件包含多个条目(以# 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,因为它更简短)。
#1有很多先例。
例如,ArrayList执行其自己的显式边界检查并IndexOutOfBoundsException使用描述性消息(包括有问题的索引和数组大小)进行抛出,而不是让基础数组访问因其自身的异常而失败(在本示例中,该数组恰好是IndexOutOfBoundsException的子类)
http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/ArrayList.java#l1200
在大多数情况下,我个人会选择#1而不是#2,主要是因为它更加明确,并提供更清晰的异常消息。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。