問題タブ [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.

0 投票する
1 に答える
703 参照

java - ResultSet 呼び出しに対する AutoCloseable Iterator は、ファイナライザーから閉じる必要がありますか?

ResultSet に裏打ちされた Iterator があります。行レベルの後処理に必要です。イテレータは AutoCloseable インターフェースを実装しています。ユーザーによって中断されたすべての行/反復を反復処理するまで、接続は開いたままになります。イテレータのコンシューマが明示的に close() メソッドを呼び出すか、Java7 の try ブロックでイテレータの使用をラップしている場合は、すべて問題ありません。ただし、消費者がそうしない場合、接続がプールに返されることを保証できません。C# の世界では、ファイナライザーを実行し、フォールバック オプションとしてファイナライザーから Dispose(bool) を呼び出します。Javaでも同じことをするべきですか?

0 投票する
1 に答える
1369 参照

java - try-wtth-resources ブロック内で GZIPOutputStream オブジェクトを使用する場合、finish() を呼び出す必要がありますか?

try-with-resources [autoclosable] ブロック内で GZipOutputStream を使用する場合、リソースを使い終わっfinish()た後に明示的に呼び出す必要がありますか?

0 投票する
2 に答える
444 参照

java - Java - ScheduledExecutorService: 終了時にタスクを実行

を使用しScheduledExecutorServiceて、固定レートでタスクを実行します。これが私のメインメソッドの内容です:

RemoteSyncAutoCloseableは(and Runnable) インターフェイスを実装しているため、最初はtry-with-resources次のように を使用しました。

ただしupdater.startService()、タスクをスケジュールした直後に戻るため、updater.close()が途中で呼び出され、アプリケーションが終了します。

startService()方法は次のRemoteSyncとおりです。

理想的には、次のような方法が必要です。

これにより、スケジューラが実際に停止したときに呼び出すことができますclose()が、残念ながら私はそのような方法を知りません。

私ができることは、次のstartService()ような方法でメソッドをブロックすることです:

しかし、これは汚くてハックな気がします。

どんな提案でも大歓迎です。

0 投票する
3 に答える
788 参照

java - autocloseable にロックラッパーを使用するには?

次のwrapeprを書きました:

私のコードでは、次のように使用します。

各メソッドでラッパーを作成したくありません。

単一のラッパーを組み合わせてリソースで試す方法はありますか?

0 投票する
1 に答える
1981 参照

java - Java では、Closeable インターフェースの close() メソッドの冪等性はどのように保証されますか?

CloseableインターフェースはJava 5で導入されましたが、インターフェースはJava 7でステートメントAutoCloseableとともに導入されました。(Java 7 以降)インターフェイスを拡張します。try-with-resourcesCloseableAutocloseable

OCA/OCP Java SE 7 - Programmer I & II Study Guide』の 399 ページには、次のように書かれています。

close()複数回呼び出すとどうなりますか? 場合によります。を実装するクラスAutoCloseableの場合、実装はべき等である必要があります。つまりclose()、一日中電話しても、2 回目以降は何も起こらないということです。[...] を実装するクラスCloseableの場合、そのような保証はありません。

したがって、このテキストによると、 の実装はAutoCloseable冪等である必要があり、そうでCloseableないものは必要です。AutoCloseabledocs.oracle.com でインターフェースのドキュメントを見ると、次のように書かれています。

closeのメソッドとは異なりCloseable、この close メソッドはべき等である必要はないことに注意してください。つまり、このcloseメソッドを複数回呼び出すと、目に見える副作用が発生する可能性がありますCloseable.close

今、これは本に書かれていることの反対です。2 つの質問があります。

(1) 正しいのは? docs.oracle.com のドキュメントですか、それとも本ですか? べき等性が必要な 2 つのインターフェイスはどれですか?

(2) どちらが冪等である必要があるとしても、Java には冪等であることを保証する方法がまったくないというのは正しいですか? もしそうなら、メソッドが冪等であるという「要件」はcloseプログラマーがすべきことですが、インターフェイスを使用した誰かが実際にそれを行ったかどうかはわかりませんよね? この場合、冪等性は単なるオラクルの提案ですよね?