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

関連する問題