bot_bot:
このような:
public void myMethod(InputStream fileIn){
try (InputStream in = fileIn) {
do stuff....
}
}
これは、動作しているようです。それは安全ですか?
アンディ・ターナー:
それは仕事に思えます
あなたが追加した場合には行いますInputStream
(またはいくつかのスーパータイプInputStream
前)in
:言語仕様が必要とするリソースごとに変数を宣言するためにどちらかを。
try (InputStream in = fileIn) { ... }
または単にを直接参照fileIn
9+ Javaで、:
try (fileIn) { ... }
そして、それが動作しない理由はありません:変数宣言の形式では、変数に式(新しいクラス、メソッド呼び出しなどの配列要素の結果)を割り当てています。それは「新しい」インスタンスを取得したりしていない場合、リソースは見ることができません:それは正しい型の値を持つだけのことです。
それは安全なのですか?
あなたは「安全な」の意味を正確に依存します。
それは、このコードではエラーなしで動作するという意味では確かに安全であり、かつin.close()
ブロックの最後に呼び出されます。
しかし、それは「あなたがストリームをオープンしていない場合は、それを閉じていない」という経験則に違反します。このように、それはそれはまだメソッドを呼び出した後に開いているストリームを期待するプログラムの他の部分で予期しない障害を引き起こすことを意味において安全ではないかもしれません。