我看到了一个奇怪的行为,根据 JMM 似乎不应该发生。我有扩展类 A 的 B 类,A 中的最终受保护字段在 A 构造函数中初始化,B 类在其构造函数中访问该构造函数。
但是,在极少数情况下,我在 B 中访问时会得到 NPE。有什么想法吗?
部分代码:
class AsyncReplicationSourceGroup extends AbstractReplicationSourceGroup{
public AsyncReplicationSourceGroup(DynamicSourceGroupConfigHolder groupConfig){
super(groupConfig);
createReplicationChannels();
}
protected void createReplicationChannels(){
//...
specificLogger.finest("created channel"); // this is where the NPE is thrown from
//...
}
}
abstract class AbstractReplicationSourceGroup{
protected final Logger specificLogger;
public AbstractReplicationSourceGroup(DynamicSourceGroupConfigHolder groupConfigHolder){
specificLogger = Logger.getLogger(Constants.LOGGER_REPLICATION_GROUP + "." + _groupConfigHolder.getConfig().getName());
//...
}
}