29

これは SO に関する私の最初の質問であり、同様の質問がまだないことに混乱しています!

質問は次のとおりです。

try-with-resources がフィールド変数で機能しないのはなぜですか?

言い換えれば、そのために常にローカル変数が必要なのはなぜですか?

ここにいくつかのサンプルコードがあります:

public class FileWriteTest {

    public FileWriter file;

    public void workingDemo() {

        try(FileWriter file = new FileWriter(new File("someFilePath")) {
            // do something
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void notWorkingDemo() {

        file = null;

        try(file = new FileWriter(new File("someFilePath")) {
            // do something
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

なぜこの慣習があるのか​​ 誰か説明してもらえますか?

4

7 に答える 7

8

オブジェクトが使用領域から逃れることができるため、設計者はフィールドを使用することを悪い考えだと考えていたのではないかと思います。つまり、try ブロックでのみ有効なので、他の場所ではアクセスできないはずです。

于 2013-06-21T12:35:35.800 に答える
0

言語仕様との一貫性に関係している可能性があります。変数が 2 つの括弧の間で宣言されると、その変数は内部にカプセル化され、外部からアクセスできなくなります。

anything
{
int var;
}

// cannot access var from here!

{} を例外にする必要があるのはなぜですか?

于 2013-06-21T13:33:17.993 に答える