在Netty中,我经常看到在类方法中本地分配的对象成员变量。这是一种风格问题还是有程序性的好处?
我在下面添加了一个代码段:
public ChannelFuture bind() {
validate();
SocketAddress localAddress = this.localAddress;
if (localAddress == null) {
throw new IllegalStateException("localAddress not set");
}
return doBind(localAddress);
}
答案 0 :(得分:2)
当多线程成为一个问题时,我通常会看到这种模式。例如,如果另一个线程可能会更改成员值或在null检查后将其置零,但它仍然是在该点发生成员访问的有效用例。或者代码试图避免锁定/同步。因此,将成员复制到本地,并使用本地副本完成所有进一步的操作以防止空访问。