WeakReference、_componentsのCollections.synchronizedListがあります。
私はコンパイラーが文句を言うのを期待して、次のようなものを書きました:
public boolean addComponent2(Component e) {
synchronized (_components) {
return _components.add(new WeakReference<Component>(e));
}
}
しかし、コンパイラは完全に満足しています。 List.add()はTRUEを返すことに注意してください。つまり、同期ブロックからの終了はロックを解放しますが、このLOOKは奇妙ではありませんか?それは一種のブロックの「穴」のようなもので、ループでreturnを使用するのと似ています。
このようなコードを維持してもらえますか?
ループから、または適切なtry
ブロックを持つfinally
ブロックから戻るように、それは完全に問題ありません。セマンティクスを認識する必要があるだけで、その時点でそれは完全に理にかなっています。
これは、ローカル変数を導入するよりも確かに単純なコードです。
// Ick - method body is now more complicated, with no benefit
public boolean addComponent2(Component e) {
boolean ret;
synchronized (_components) {
ret = _components.add(new WeakReference<Component>(e));
}
return ret;
}
synchronized
ブロック内に戻ることに問題はありません。ロックは正しく解除されます。