私が取り組んでいるシステムに次の(ドクターされた)クラスがあり、 FindbugsがSE_BAD_FIELD警告を生成しています。私が思った方法で修正する前に、なぜそれが表示されるのかを理解しようとしています。私が混乱している理由は、説明がクラスで他のシリアル化できないインスタンスフィールドを使用していないことを示しているように見えるためですが、bar.model.Fooもシリアル化できず、まったく同じ方法で使用されています(私がわかります)が、Findbugsは警告を生成しません。
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(...);
}
}
...
}
解決策での私の最初の赤面は、私がそれを使用するときに、工場からロガー参照を取得することです。
public DispositionFile() {
Logger logger = LoggerFactory.getLogger(this.getClass());
for (Foo foo : originalFoos) {
this.logger.debug(...);
}
}
ただし、これは特に効率的ではないようです。
考え?