1

便宜上、インターフェイスを使用して、オブジェクトをさらにAutoCloseable使用する前にファイナライズする必要があるオブジェクトを処理したいと考えています。

唯一の問題は、try-with-resourcesブロックがそれ自体であるということです。つまり、通常、AutoCloseableインスタンスへの参照を取得するには、次のようにする必要があります。

    MyCloseable mc;
    try (MyCloseable m = mc = new MyCloseable()) {
        m.doSomeStuff();
    }
    System.out.println(mc.getValue1());
    System.out.println(mc.getValue2());
    // ... and so on

ここでこの構造:

MyCloseable mc;
try (MyCloseable m = mc = new MyCloseable()) {

やや乱雑に見えます。したがって、私の質問は設計上の問題に関するものです。try-w-rJavaアーキテクトが次のようなブロックの使用を想定していなかった理由は何なのか疑問に思います。

MyCloseable mc = new MyCloseable();
try (mc) { ... }

上で説明したように、私はそれを使用すべきではないのでしょうか?それを行うのが良い習慣である場合は?

編集なぜ私の質問がJavaのtry-with-resourceで宣言が必要なのかと異なる理由を説明するように求められました

説明は非常に簡単です。理由を尋ねているのではありません。、しかし:それを行うのは良い習慣ですか?

4

2 に答える 2

3

AutoCloseableの目的は、使用されなくなったときに自動的にクリーンアップを実行することです。

そのため、try-with-resources ブロックの後にオブジェクトを使用することは、最小の驚きの原則に違反します。

于 2016-01-15T09:46:17.360 に答える
0

@Tunaki のおかげで、彼は関連する質問への非常に役立つリンクをくれました: Java の try-with-resource で宣言が必要なのはなぜですか?

なぜこの制限が存在するのか疑問に思ったわけではありませんが、設計上、私の使用方法は何か悪いことだと思っていました。

しかし、そのような使用法を許可するという事実によるとJava-9

MyCloseable mc;
try (mc = new MyCloseable()) { ... }

私が探しているものは正確には何ですか?私の質問への答えは次のようになると思います:はい、大丈夫です

于 2016-01-15T09:36:37.133 に答える