更喜欢显式的 IllegalArgumentException 而不是自动的

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


现在我可以这样做:


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,因为它更短)。


噜噜哒
浏览 64回答 1
1回答

回首忆惘然

#1 有很多先例。例如,使用描述性消息(包括有问题的索引和数组大小)执行其自己的显式边界检查和抛出,而不是让底层数组访问因自己的异常而失败(在本例中恰好ArrayList是,但这不是重点)。IndexOutOfBoundsExceptionIndexOutOfBoundsExceptionhttp://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/ArrayList.java#l1200在大多数情况下,我个人会选择#1 而不是#2,主要是因为它允许我更加明确并提供清晰的(呃)异常消息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java