我正在阅读java.util.Random
课程,并注意到没有nextDouble()
,nextFloat()
和nextLong()
可以接受绑定。
有许多方法可以完成like this。
但我的问题是为什么java
没有向我们提供接受绑定的nextInt(int n)
等必需方法。
他们没有提供这些方法的具体原因吗?
答案 0 :(得分:4)
一个好的API总是试图提供用户完成其工作所需的基本元素。
让EditText
只是一个可能的实现。如果您需要其他发行版怎么办?
换句话说:随机API可能会尝试预测所有潜在的使用模式,但这会非常膨胀整个API。相反,设计师选择一个非常小的界面 - 但是你拥有了构建自己的东西所需的所有元素。
事情是:最后,这是创建Random类的人的设计风格决定。而且往往可以通过许多不同的方式解决问题。因此,你不应该对这里选择的解决方案得出深刻的结论。
答案 1 :(得分:0)
查看来自Random.java
的代码(在jdk 8中)有两个突出的陈述。
* The algorithm is slightly tricky. It rejects values that would result
* in an uneven distribution (due to the fact that 2^31 is not divisible
* by n). The probability of a value being rejected depends on n.
和
* Linear congruential pseudo-random number generators such as the one
* implemented by this class are known to have short periods in the
* sequence of values of their low-order bits.
如果不是随机数生成方面的专家(他们将其称为伪随机数生成),很明显该算法正在努力更好地返回"随机数& #34;数字比你只是next() % bound
,在随机性方面(也可能是效率)。
还有便利因素,但鉴于代码中的注释,这似乎并不是主要原因。