You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:58:10