Java では、同期ブロック内の戻り値は不適切なスタイルのようです。本当に問題なのでしょうか? 質問する

Java では、同期ブロック内の戻り値は不適切なスタイルのようです。本当に問題なのでしょうか? 質問する

WeakReference、_components の Collections.synchronizedList があります。

コンパイラが文句を言うことを予想して、次のようなものを書きました。

public boolean addComponent2(Component e) {
    synchronized (_components) {
        return _components.add(new WeakReference<Component>(e));
    }        
}

しかし、コンパイラは完全に満足しています。List.add() が TRUE を返すことに注意してください。同期ブロックから出るとロックが解放されますが、これは奇妙に見えませんか? これは、ループで return を使用するのと同様に、ブロック内の「穴」のようなものです。

このようなコードを保守することに満足しますか?

ベストアンサー1

ループから戻る場合や、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;
}

おすすめ記事