Почему PMF.java - последний класс? - PullRequest
2 голосов
/ 24 февраля 2010

Согласно документации 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 ]

6 голосов
/ 24 февраля 2010

Классы должны быть окончательными, если для этого нет веских причин.

Не существует варианта использования, в котором нужно было бы наследовать от PMF, поэтому он должен быть окончательным.

1 голос
/ 24 февраля 2010

PMF - это класс, для которого не нужно создавать экземпляры, поскольку у него нет состояния или методов экземпляра, он строго предназначен для предоставления статических методов и глобального состояния.

Элемент 4 в Effective Java предоставляет эту идиому, однако она не добавляет, что класс должен быть окончательным, поскольку в любом случае было бы невозможно создать его подкласс с помощью частного конструктора. И там явно рекомендуется документировать приватный конструктор, чтобы избежать именно той путаницы, которую вы испытываете.

Кроме того, этот пример кода предоставляет статическую инициализацию обходной путь для двойной проверки блокировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...