为何Java Random类文档标注了nextInt(int bound)却未标注双参数nextInt方法?
问题解答
首先明确两个核心结论:
- 编译失败确实是JDK版本过低导致
- 双参数
nextInt不在Random类文档里和单参数方法的重写状态无关
版本差异说明
双参数nextInt(int origin, int bound)是JDK 17才新增的方法,定义在java.util.random.RandomGenerator接口中作为默认方法提供实现,java.util.Random类从JDK 17开始才实现了RandomGenerator接口。
JDK 16及更早版本中既没有RandomGenerator接口,Random类本身也没有定义双参数nextInt方法,使用低版本JDK编译时自然会报方法找不到的错误。
文档差异原因
Random类的官方文档默认仅展示类自身定义、重写的方法,从父接口继承的默认方法不会单独罗列:
- 单参数
nextInt(int bound)是Random类从JDK 1.2版本就自带的自有实现方法,所以会在Random类文档中明确标注 - 双参数
nextInt(int origin, int bound)是从RandomGenerator接口继承的默认方法,Random类没有对该方法进行重写,因此不会在Random类的文档中单独列出
低版本兼容方案
如果需要兼容JDK 17以下的环境,要生成左闭右开区间[origin, bound)的随机整数,可以替换为以下写法:
// 需提前校验 bound > origin,避免出现参数非法错误 int randomNum = random.nextInt(bound - origin) + origin;
内容的提问来源于stack exchange,提问作者Paranoia
相关产品推荐
相关产品推荐

