問題タブ [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 が BufferedReader from lines() を閉じないようにする方法 (ストリーム)?
これは、 a で終了したBufferedReader
ときに a が閉じられないようにするために私が行っていることです:lines()
try-with-resources
これは一般的なユーティリティであり、ファイルだけでなく、多くのリーダーで動作します..
Stream<String>
を閉じても も閉じないように制御するより良い方法はありBufferedreader
ますか?
以下のコメントに従って通常の を試すと、次のようtry
になります。
それはより良いようです:)
java - `Stream を取得するときに BufferedReader が閉じられないのはなぜですか`リソースを使って試してみますか?
Stream
が try-with-resources で使用されている場合は、リーダーを閉じる必要があります。
これを考えると:
...リーダーが閉じられていませんか??
このテストは失敗します:
exception-handling - let バインディングまたは body で発生する例外の処理方法
let
同じfinallyブロックを使用して、バインディングまたはステートメントの本体で発生する可能性のある例外をどのように処理しますか? 元:
(create-connections)
または失敗した場合(dostuff)
、私はしたいです(close connections)
。いくつかのオプション:
オプション1:
connections
finally ブロックの範囲内にないため、これは明らかに機能しません。
オプション 2:
このオプションは、(destuff)
コールで発生した例外のみを捕捉し、 で発生した例外は捕捉しません(create-connections)
。
オプション 3:
connections
let バインディング内の finally ステートメントのスコープ外であるため、これも機能しません。
それで、これに対処する最善の方法は何ですか?
java - 私の AutoCloseable.close() 実装は潜在的な例外を検出できますか?
AutoCloseable
Java 7 の try-with-resources ステートメントで動作する を実装するときに、try ブロック内に例外があったかどうかを知りたいです。例えば:
これを説明するには:
さて、try-with-resources ステートメントが bytecodeにどのように変換されるかを理解すると、それは不可能だと思います。しかし、インストルメンテーション/リフレクション/文書化されていないコンパイラ機能を使用してRuntimeException
、内部から上記にアクセスできる(信頼できる!)トリックはありますAutoCloseable.close()
か?
注: 私は API 設計者であり、API コンシューマのリソースの試行コードを制御することはできません。したがって、実装はAutoCloseable
サイトで行う必要があります
java - AutoCloseable を実装する場合、close() を呼び出すヘルパー?
これを行うJDKまたは共通ライブラリにヘルパーメソッドはありますか:
close()
該当する場合は、オブジェクトを呼び出すためのワンライナーです。
リソースの試行については知っていますが、この状況には当てはまりません。close()
そして、メソッドを実装しているすべてのクラスがAutoCloseable
. しかし、私は上記を何度も書いているようです..
java - 工場で作成されたインスタンスの AutoCloseable "リソース リーク" 警告?
Eclipse for AutoCloseable
s で表示されるこれらの「リソース リーク」警告は、命の恩人のようです。
ただし、工場で作成されたインスタンスでそれらを機能させるにはどうすればよいですか?
例(a
動作しますが、b
動作しません):
貼り付けることができる注釈newResource()
や、所有権の変更をコンパイラ (または Eclipse ですか?) に知らせるためにできることはありますか?