Сделайте перечислимый ЭКЗЕМПЛЯР частным

Я использую перечислимый одноэлементный шаблон как это:

public enum LicenseLoader implements ClientLicense {
    INSTANCE;

    /**
     * @return an instance of ClientLicense
     */
    public static ClientLicense getInstance() {
        return (ClientLicense)INSTANCE;
    }

   ...rest of code

}

Теперь я хочу возвратить Интерфейс и скрыть то, что мы на самом деле используем перечисление вообще. Я хочу, чтобы клиент использовал getInstance () и не LicenseLoader. ЭКЗЕМПЛЯР, поскольку однажды я могу решить использовать другой шаблон при необходимости.

Возможно сделать ЭКЗЕМПЛЯР частным к перечислению?

6
задан James P. 4 July 2010 в 13:54
поделиться

2 ответа

А как насчет создания общедоступного интерфейса и частного перечисления , которое реализует указанный интерфейс, с одноэлементным INSTANCE константа?

Итак, что-то вроде этого (все в одном классе для краткости):

public class PrivateEnum {

    public interface Worker {
        void doSomething();
    }

    static private enum Elvis implements Worker {
        INSTANCE;
        @Override public void doSomething() {
            System.out.println("Thank you! Thank you very much!");
        }
    }

    public Worker getWorker() {
        return Elvis.INSTANCE;
    }
}

Таким образом, вы не раскрываете Elvis.INSTANCE (или даже enum Elvis ), используя интерфейс для определения вашей функциональности, скрывая все детали реализации.

4
ответ дан 17 December 2019 в 04:41
поделиться

Все enum константы доступны. Например, через десериализацию или enum-специфические рефлексивные методы.

Как всегда, я настоятельно рекомендую избегать синглтонов.

1
ответ дан 17 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: