我在正在开发的系统中有一个以下(经过修改)的类,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(...);
}
}
不过那似乎并不是特别高效的,你有什么想法吗?