2010-02-24 69 views
2

根據App Engine文檔,應該只在應用程序中創建一次PersistenceManagerFactory爲什麼PMF.java是'最終'類?

它提供了此示例:

package guestbook; 

import javax.jdo.JDOHelper; 
import javax.jdo.PersistenceManagerFactory; 

public final class PMF { 
    private static final PersistenceManagerFactory pmfInstance = 
     JDOHelper.getPersistenceManagerFactory("transactions-optional"); 

    private PMF() {} 

    public static PersistenceManagerFactory get() { 
     return pmfInstance; 
    } 
} 

爲什麼PMF.java在除了使pmfInstance一個「private static final」的對象是「public final class」?

回答

6

類別應該是最終的,除非有充分的理由不這樣做。

沒有使用案例,其中一個人想從PMF繼承,所以它應該是最終的。

+0

我同意,但這必然會引起辯論。您可能想要在_Effective Java_中引用與您同意的項目。 :-) – 2010-02-24 20:31:11

+0

鑑於構造函數已經是私有的,它似乎仍然是多餘的。 Effective Java的第4項離開了最終的結果。 – Yishai 2010-02-24 20:36:09

1

PMF是一個不應該被實例化的類,因爲它沒有實例狀態或方法,所以它嚴格地提供靜態方法和全局狀態。

Effective Java中的第4項提供了這個習慣用法,但它沒有補充說該類應該是最終的,因爲無論如何都不可能用私有構造函數繼承它。並且在那裏明確地建議將私有構造函數記錄下來以避免你所遇到的混淆。

此外,此代碼示例爲雙重檢查鎖定提供了靜態初始化workaround

相關問題