問題タブ [autocloseable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - try-with-resources ブロックでオブジェクトのメソッドを呼び出す
Java チュートリアルでは、次のことができると述べていますtry-with-resources
。
このチュートリアルでは、 が閉じられることはありません。したがって、次のようにインターフェイスも実装しているため、ResultSet
を含めたいと思います。ResultSet
AutoCloseable
これは問題なく動作しますが、クエリを実行する前にPreparedStatements
いくつかの値を設定できるようにしたいと考えています。
変数の割り当てのみが許可されているため (私は推測しています)、これによりさまざまなコンパイル エラーが発生します。
try-with-resources
同じブロックでこれをきちんと行う方法はありますか?
私はすでに考えました:
- ネストされた try-with-resources (これは私が避けようとしているものです)。そうすることに「悪い」ことは何もないことに気づきました。読みやすくするためにこれをやりたいだけです。
次の場合を考慮してください。
対
- メソッドにオブジェクトを
setString()
返させ、代入に含める - 接続を作成し、それに応じてパラメーターを設定する、ある種のヘルパー メソッドを作成します。
何かのようなもの:
java - try ブロック外の AutoCloseable インスタンスへの参照
便宜上、インターフェイスを使用して、オブジェクトをさらにAutoCloseable
使用する前にファイナライズする必要があるオブジェクトを処理したいと考えています。
唯一の問題は、try-with-resources
ブロックがそれ自体であるということです。つまり、通常、AutoCloseable
インスタンスへの参照を取得するには、次のようにする必要があります。
ここでこの構造:
やや乱雑に見えます。したがって、私の質問は設計上の問題に関するものです。try-w-r
Javaアーキテクトが次のようなブロックの使用を想定していなかった理由は何なのか疑問に思います。
上で説明したように、私はそれを使用すべきではないのでしょうか?それを行うのが良い習慣である場合は?
編集なぜ私の質問がJavaのtry-with-resourceで宣言が必要なのかと異なる理由を説明するように求められました
説明は非常に簡単です。理由を尋ねているのではありません。、しかし:それを行うのは良い習慣ですか?
java - Autocloseable クラスがデフォルトの close メソッドを呼び出さない
私はこのコードを持っています:
そしてメインクラス:
この出力が得られる理由を知りたいです。
それ以外の:
java - Java プログラムの終了時にファイルを閉じないと何か害はありますか?
プログラムが起動すると、ファイルが開かれ、定期的に書き込まれます。(これはログ ファイルではありません。プログラムの出力の 1 つです。) プログラムの長さに合わせてファイルを使用できるようにする必要がありますが、ファイルを終了するために特に何もする必要はありません。閉じるだけです。
Java でのファイル I/O について、実装AutoCloseable
して try-with-resources ブロックにラップすることになっていることを収集します。ただし、このファイルは存続期間が長く、プログラムの数少ない出力の 1 つであるため、開いたすべてのファイルが try-with-resources ブロックでラップされるように整理するのは難しいと感じています。さらに、トップレベルのクラス (私のmain()
関数がある場所) は、このファイルについて知りません。
これが私のコードです。の欠如に注意してくださいwriter.close()
:
tl;drリソースが開かれた出力ファイルである場合、実装AutoCloseable
して呼び出す必要writer.close()
がありますか?プログラムが完了するまで閉じる必要はありませんか? JVM と OS (Linux) が自動的にクリーンアップしてくれると想定できますか?
おまけ (?): C#IDisposeable
でもこれに苦労しました。このusing
ブロックは、Java の try-with-resources 構造のように、何かを開いたり、すばやく処理したり、すぐに閉じたりする場合に便利な機能です。しかし、多くの場合、特にファイルの場合、そのリソースへのアクセスがしばらく滞っている場合や、複数のそのようなリソースを管理する必要がある場合はそうではありません。私の質問に対する答えが「常に try-with-resources ブロックを使用する」である場合、私は再び立ち往生します。
java - リソースを閉じるためのベスト プラクティスは何ですか?
閉じる必要があるリソースを割り当てた Java クラスがあります。これを強制する方法がよくわかりません。現在のアプローチでは、 interface を実装していますAutoCloseable
。呼び出し元が時々呼び出すことを期待し、すべてのメソッドの開始時にチェックされる close をclose()
追加し、の場合、メソッドは throws します。boolean
true
IllegalStateException
呼び出し元が呼び出すclose()
必要があることと、すべてのメソッドの開始時に閉じていることを確認する必要があることの両方は、あまり良くありません。これを回避するためのベストプラクティスはありますか?