2016-03-29 2 views
2

В Netty я видел переменные-члены объекта, назначенные локально в классах довольно часто. Является ли это вопросом стиля или есть программная выгода?Есть ли возможность назначить переменную-член объекта локально в методе?

Я включил фрагмент кода ниже:

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

Обратите внимание, что 'bind()' возвращает 'ChannelFuture'? Я считаю, что это поддерживается так, что изменение в * localAddress экземпляра * экземпляра не влияет на результат вызова привязки (который может не завершиться до тех пор, пока в будущем). –

ответ

2

я обычно вижу, что картина, когда многопоточность является проблемой. Например, если другой поток может изменить значение элемента или его значение null после нулевой проверки, все же он все еще является допустимым прецедентом для доступа члена к этой точке. Или код пытается избежать блокировок/синхронизации. Таким образом, вместо этого элемент копируется в локальный, и все дальнейшие операции выполняются с использованием локальной копии, чтобы предотвратить нулевой доступ.

+1

Оборонительное назначение тогда имеет смысл. – MWright

Смежные вопросы