在可序列化的Java类中使用记录器的正确方法是什么?
2022-09-03 04:33:57
我在我正在处理的系统中有以下(篡改)类,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(...);
}
}
不过,这似乎并不是特别有效。
思潮?