java - 设计决策 - Math.java 中单独的 RandomNumberGenerator Holder 类的用途/优势是什么?

标签 java java-8 design-decisions

所以我查看了 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/

相关文章:

java - 在 Java 中使用 Streams 和过滤器并与 varargs 匹配

java - 打开 Java 镜像的 shell

java - Java 8 Map 中的 putIfAbsent 和 computeIfAbsent 有什么区别?

java - 如何将类传递给方法并调用该类的静态方法

java - 为什么选择ConcurrentModificationException的设计准则只是结构修改

表示决策表的算法

java - struts 逻辑的 AND 条件 :emprty tag

date - Java 8 LocalDateTime四舍五入到下一个X分钟

c++ - 为什么 iterator::end( ) 是非静态成员而不类似于 string::npos?

java - 自定义链表与官方链表