Как реализовать вход в синглтон перечисления?


Я использую одноэлементное перечисление, но реализация протоколирования затруднительна. Это:

public enum Foo {
  INSTANCE;

  private final Logger log = Logger.getLogger(Foo.class.getName());

  ...
}

Logger создается так, как я создавал бы экземпляр logger для обычного класса Java, но, конечно, я получаю следующую ошибку:

Foo.java: illegal reference to static field from initializer 

Существует ли эквивалентный способ входа в синглеты enum?

3 5

3 ответа:

В ответ на ваш вопрос, просто сделайте регистратор статическим...

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

См.

Http://logging.apache.org/log4j/1.2/manual.html

Большинство примеров использования логгера там имеют логгер как статическое свойство...

Журнал динамически:

Logger.getLogger(Foo.class.getName()).info("log info");

Немного короче: используйте метод: logger().отдебажить(...)

private static Logger logger()
{
    if(logger == null)
    {
        logger = Logger.getLogger(AnEnum.class);
    }

    return logger;
}

/** Logger **/
private static Logger logger;