设计决策 - Math.java 中单独的 RandomNumberGeneratorHolder

所以我正在浏览Math.java源代码,我发现创建了一个持有者类来保存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,我们可以简单地在类本身内部声明randomNumberGeneratoras 。private static finalMath


我的问题是,为此创建一个单独的持有者类有什么好处吗?或者这只是个人喜好。


慕慕森
浏览 180回答 3
3回答

繁星点点滴滴

它们都是lazy,但一个是lazier(单例模式)。拥有一个private static字段意味着当持有该字段的类被初始化时,该字段也被初始化。因此,如果您需要在该类上调用一个方法,但您不需要那个 singleton,它仍然会被初始化。另一方面,嵌套类会阻止这种情况,并且会在实际使用时进行初始化。确切地说,这很少是重要的情况,jdk 本身很可能是极少数的例子之一。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java