Как правильно инициализировать регистратор slf4j (используя log4j) в абстрактных классах / для наследования

В моем проекте у меня есть абстрактный класс верхнего уровня FrameProducer . Я добавил регистратор slf4j на этом уровне, чтобы он уже был у каждого наследующего класса. Вот код:

public abstract class FrameProducer extends Observable {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());

    protected BufferedImage frame;

    public BufferedImage getFrame() {
        return frame;
    }

    public void fireEvent() {
        logger.debug("Firing event. Implementing class: {}", this.getClass());
        setChanged();
        notifyObservers();
    }
}

Есть также два наследующих класса: CameraFrameGrabber и GrayscaleFilter . Тем не менее, когда метод fireEvent () вызывается из CameraFrameGrabber или GrayscaleFilter , сообщение регистрируется на уровне FrameProducer . Вот журнал, для наглядности: I '...

При оценке выражения в скалярном (логическом) контексте Perl использует явное значение 1 в качестве результата, если выражение оценивается как истина, и пустую строку, если выражение оценивается как ложный. Мне любопытно, почему Perl использует пустую строку для представления логического ложного значения, а не 0 , что кажется более интуитивным.

Обратите внимание, что меня не волнует, что Perl обрабатывает пустую строку как ложную в скаляре. (логический) контекст.

РЕДАКТИРОВАТЬ

Каким образом использование строки, которая является истинной (например, «false» ) в качестве строкового представления ложных значений, изменит смысл существующего кода? Можно ли сказать, что код, изменяющий семантику после такого изменения, менее надежен / корректен, чем мог бы быть? Я предполагаю, что контекст строки настолько распространен в Perl, что единственный вариант, ведущий к разумной семантике, - это если логическое значение сохранит свое значение после циклического перехода к строке и от нее ...

18
задан Piotr Dobrogost 23 November 2012 в 17:37
поделиться