java.time.temporal.ValueRange构造疑似Bug的技术咨询
这不是你的理解问题,标准实现里这确实该抛异常!
首先得说,你对Javadoc的理解完全没问题——ValueRange.of(long min, long maxSmallest, long maxLargest)的文档明确规定,当min > maxSmallest或者maxSmallest > maxLargest时,必须抛出IllegalArgumentException。你写的ValueRange.of(5, 2, 10)完全命中了第一个违规条件(5>2),按道理绝对该报错。
那为什么你的代码没抛异常还输出了5 - 2/10?大概率是这几个原因:
- JDK版本存在疏漏:如果你用的是Java 8非常早期的版本(比如8u20之前),可能这个方法的实现没做严格的参数校验。建议升级到Java 8u40+或者更高的稳定版本(比如11、17)再测试——在标准OpenJDK的这些版本里,这段代码会直接抛出异常,报错信息就是
Minimum value must be less than or equal to maximum smallest value。 - 非标准JDK实现:如果是在Android平台或者使用了第三方定制版JDK,可能存在不符合规范的实现,跳过了参数校验逻辑。
- 确认没调用错方法:再检查下代码,你确实调用的是三个参数的
of重载方法,不是两个参数的of(long min, long max)——毕竟两个参数的方法不会输出2/10这种带可变最大值的格式。
要是升级到标准稳定版JDK后还是没抛异常,那才是真的遇到了Bug,但这种情况在主流JDK版本里几乎不可能出现。
内容的提问来源于stack exchange,提问作者Signal Eleven
相关产品推荐
相关产品推荐

