为什么PMF.java是一个'最终'类?

时间:2010-02-24 20:23:54

标签: java google-app-engine singleton

根据App Engine文档,PersistenceManagerFactory只应在应用程序中创建一次。

它提供了这个样本:

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除了将public final class设为“pmfInstance”对象外,还必须是“private static final”?

2 个答案:

答案 0 :(得分:6)

课程应该是最终的,除非有充分的理由不这样做。

没有一个用例需要从PMF继承,所以它应该是最终的。

答案 1 :(得分:1)

PMF是一个不应该实例化的类,因为它没有实例状态或方法,严格来说它提供静态方法和全局状态。

Effective Java中的第4项提供了这个习惯用法,但它没有添加该类应该是最终的,因为无论如何都不可能使用私有构造函数对它进行子类化。并且明确建议记录私有构造函数以避免您遇到的混乱。

此外,此代码示例还提供静态初始化workaround以进行双重检查锁定。