Was ist der richtige Weg, um einen Logger in einer serialisierbaren Java-Klasse zu verwenden?

Ich habe die folgenden doctored) Klasse in einem System, an dem ich arbeite und Findbugs erzeugt ein SE_BAD_FIELD warning und ich versuche zu verstehen, warum das so ist, bevor ich es in der Art und Weise repariere, wie ich es mir vorgestellt habe. Ich bin verwirrt, weil die Beschreibung darauf hindeutet, dass ich keine anderen nicht serialisierbaren Instanzfelder in der Klasse verwendet habe, aber bar.model.Foo ist ebenfalls nicht serialisierbar und wird genau so verwendet (soweit ich das sehe) kann sagen), aber Findbugs erzeugt keine Warnung dafür.

import bar.model.Foo;

import java.io.File;
import java.io.Serializable;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Demo implements Serializable {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private final File file;
    private final List<Foo> originalFoos;
    private Integer count;
    private int primitive = 0;

    public Demo() {
        for (Foo foo : originalFoos) {
            this.logger.debug(...);
        }
    }

    ...

}

Meine anfängliche Errötung bei einer Lösung besteht darin, eine Logger-Referenz ab Werk so zu erhalten, wie ich sie verwende:

public DispositionFile() {
    Logger logger = LoggerFactory.getLogger(this.getClass());
    for (Foo foo : originalFoos) {
        this.logger.debug(...);
    }
}

Das scheint jedoch nicht besonders effizient zu sein.

Gedanken

Antworten auf die Frage(8)

Ihre Antwort auf die Frage