所以我正在瀏覽Math.java源代碼,我發(fā)現(xiàn)創(chuàng)建了一個(gè)持有者類(lèi)來(lái)保存randomNumberGenerator靜態(tài)變量。這是相關(guān)的代碼段。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,我們可以簡(jiǎn)單地在類(lèi)本身內(nèi)部聲明randomNumberGeneratoras 。private static finalMath我的問(wèn)題是,為此創(chuàng)建一個(gè)單獨(dú)的持有者類(lèi)有什么好處嗎?或者這只是個(gè)人喜好。
3 回答

繁星點(diǎn)點(diǎn)滴滴
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
它們都是lazy
,但一個(gè)是lazier
(單例模式)。擁有一個(gè)private static
字段意味著當(dāng)持有該字段的類(lèi)被初始化時(shí),該字段也被初始化。因此,如果您需要在該類(lèi)上調(diào)用一個(gè)方法,但您不需要那個(gè) singleton,它仍然會(huì)被初始化。
另一方面,嵌套類(lèi)會(huì)阻止這種情況,并且會(huì)在實(shí)際使用時(shí)進(jìn)行初始化。
確切地說(shuō),這很少是重要的情況,jdk 本身很可能是極少數(shù)的例子之一。
添加回答
舉報(bào)
0/150
提交
取消