0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Effective Java(第3版) 項目9 try-finally よりも try-with-resourcesを選ぶ

0
Last updated at Posted at 2021-05-05

クローズしなければならない資源に対しては、Java7で導入された try-with-resources を使用するべき、という内容です。

記載内容

結論としては、クローズが必要な資源を使用する場合、try-with-resourcesを使用するべき。

try-finally の欠点

Java6以前は、資源の適切なクローズを保証するだったが、以下の欠点がある

  • 間違えやすい(2007時点でJavaライブラリ内の3分の2が間違えているほど)
  • finally内で発生した例外が最初に発生した例外を隠してしまう

try-with-resourcesの利点

try-finallyの問題が一挙に解決している。

  • 資源はAutoCloseableインタフェースを実装する必要が有る
  • closeで例外が発生しても、最初の例外が優先される。getSuppressedメソッドで、closeで発生した例外も取得可能
  • catch節を記載することも可能

考察

かなり以前から、ファイナライザは使うべきではない、というのが一般的だったと思いますが、
非推奨になっており、明確に使うべきではない、という状態になっています。

ただし、代替となるクリーナーも、セキュリティ以外のファイナライザの欠点である

  • 実行タイミングが分からない
  • 確実に実行されるとは限らない

はそのままですので、やはり確実な後処理には向かないです。

try-with-resourcesを使い、ファイルのオープンのように、使用上限がある重要な資源であれば、
保険でクリーナーを使用する、程度の使い方にとどまるかと思います。
ただし、GCに関するパフォーマンスの問題がありますので、AutoCloseableなクラス全てで
クリーナーを使う、というのは避けるべきかと思います。

Effective Java(第3版) 要約 目次

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?