Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在方法中局部指定对象成员变量是否有好处?_Java_Netty - Fatal编程技术网

Java 在方法中局部指定对象成员变量是否有好处?

Java 在方法中局部指定对象成员变量是否有好处?,java,netty,Java,Netty,在Netty中,我经常看到在类方法中本地分配对象成员变量。这是一个风格的问题还是有一个程序性的好处 我在下面包含了一段代码片段: public ChannelFuture bind() { validate(); SocketAddress localAddress = this.localAddress; if (localAddress == null) { throw new IllegalStateException("localAddress n

在Netty中,我经常看到在类方法中本地分配对象成员变量。这是一个风格的问题还是有一个程序性的好处

我在下面包含了一段代码片段:

public ChannelFuture bind() {
    validate();
    SocketAddress localAddress = this.localAddress;
    if (localAddress == null) {
        throw new IllegalStateException("localAddress not set");
    }
    return doBind(localAddress);
}

我通常在关注多线程时看到这种模式。例如,如果另一个线程可能会更改成员值或在null检查后将其设置为null,那么在该点进行成员访问仍然是一个有效的用例。或者代码试图避免锁定/同步。因此,取而代之的是将成员复制到本地,所有进一步的操作都使用本地副本来完成,以防止空访问

请注意,
bind()
返回一个
ChannelFuture
?我相信这样做是为了使对实例的
localAddress
的更改不会影响绑定调用的结果(可能要到将来某个时候才能完成)。因此,防御性分配是有意义的。