根据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
”?
答案 0 :(得分:6)
课程应该是最终的,除非有充分的理由不这样做。
没有一个用例需要从PMF继承,所以它应该是最终的。
答案 1 :(得分:1)
PMF是一个不应该实例化的类,因为它没有实例状态或方法,严格来说它提供静态方法和全局状态。
Effective Java中的第4项提供了这个习惯用法,但它没有添加该类应该是最终的,因为无论如何都不可能使用私有构造函数对它进行子类化。并且明确建议记录私有构造函数以避免您遇到的混乱。
此外,此代码示例还提供静态初始化workaround以进行双重检查锁定。