Как гарантировать контроль экземпляра Java (без enum) в мире сериализации? - PullRequest
4 голосов
/ 21 мая 2009

В мире до Java 1.5 (поэтому нет enum) и при сериализации моего объекта, как я могу обеспечить надлежащее управление экземпляром? Я говорю о таком классе, где, насколько я могу сказать, я не уверен, что instance0 и instance1 всегда будут единственными экземплярами.

import java.io.Serializable;

public final class Thing implements Serializable {

    private static final long serialVersionUID = 1L;

    public static final Thing instance0 = new Thing();
    public static final Thing instance1 = new Thing();

    private Thing(){};
}

Ответы [ 3 ]

4 голосов
/ 21 мая 2009

Вы действительно должны проверить Эффективная Java . В главе об Singleton это несколько рассматривается, и есть глава о шаблоне Typesafe Enum, которая определенно повлияла на способ реализации enum.

Краткий ответ: вы должны реализовать readResolve.

2 голосов
/ 21 мая 2009

Если я вас правильно понимаю, то вам нужно принять совет Джошуа Блоха и реализовать метод readResolve, чтобы вернуть один из ваших постоянных экземпляров.

private Object readResolve() throws ObjectStreamException {
  return PRIVATE_VALUES[ordinal];  // The list holding all the constant instances
}
1 голос
/ 21 мая 2009

Эта ссылка является примером от Sun, который работает аналогично решению, представленному в Effective Java, как предлагалось другими авторами.

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