所以我查看了 Math.java
源代码,我发现创建了一个 holder 类来保存 randomNumberGenerator
静态变量。这是相关的代码。
public final class Math {
// other methods.
public static double random() {
return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}
private static final class RandomNumberGeneratorHolder {
static final Random randomNumberGenerator = new Random();
}
}
IMO,我们可以简单地将 randomNumberGenerator
声明为 Math
类本身中的 private static final
。
我的问题是,为此创建一个单独的 holder 类有什么好处吗?或者这只是个人喜好。
最佳答案
这是 initialisation-on-demand holder pattern 的示例.当Math
类被JVM 加载时,Random
实例不会立即被构造。相反,这只会在调用 random()
方法时发生,此时将加载 RandomNumberGenreatorHolder
类,并且 Random
单例对象构造。
本质上,代码确保 Random
单例是延迟创建的。
关于java - 设计决策 - Math.java 中单独的 RandomNumberGenerator Holder 类的用途/优势是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51893750/