为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

噜噜哒 2023-10-12 20:43:53
我有一个类应该包含在某些输入文件中找到的字符串。合同是该文件包含多个条目(由 # 个字符分隔),准确地说:该文件中至少应包含两个条目。现在我可以这样做: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 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

#1 有很多先例。

例如,使用描述性消息(包括有问题的索引和数组大小)执行其自己的显式边界检查和抛出,而不是让底层数组访问因自己的异常而失败(在本例中恰好ArrayList是,但这不是重点)。IndexOutOfBoundsExceptionIndexOutOfBoundsException

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

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


查看完整回答
反对 回复 2023-10-12
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信