回答編集履歴

1

説明追加

2019/05/30 09:45

投稿

jimbe
jimbe

スコア13336

test CHANGED
@@ -16,9 +16,17 @@
16
16
 
17
17
  FileReader の後に BufferedReader を生成していますので, BufferedReader の生成に失敗した場合 FileReader の close が必要なのではないか, とのご指摘は, その通りだと思います.
18
18
 
19
- ですので最近は try が拡張され,
19
+ ですが, 完璧を期そうとすると finally 内に close のために幾重も if 文重なることになり, 記述方法に因っては, 例えばサンプル程度のコードでも大半が close の部分だったりと成りえます.
20
20
 
21
+ ですので, 生成は成功する前提で, アクセス中に異常があっても close は行うというカタチにしているのではないでしょうか.
22
+
23
+
24
+
25
+ とは言え, もちろん仕事としてこのような箇所があった場合は, どんなに巨大な見難い finally でも必要なら書かざるを得ません.
26
+
27
+ そのような状況からか, 最近は try が拡張され,
28
+
21
- ```
29
+ ```
22
30
 
23
31
  try(FileReader parent = new FileReader("abc.txt");
24
32
 
@@ -33,3 +41,17 @@
33
41
 
34
42
 
35
43
  [try-with-resources文の基本](https://qiita.com/Takmiy/items/a0f65c58b407dbc0ca99)
44
+
45
+
46
+
47
+ それでも
48
+
49
+ ```
50
+
51
+ try(BufferedReader in = new BufferedReader(new FileReader("abc.txt"));){
52
+
53
+ }
54
+
55
+ ```
56
+
57
+ としてしまうとやはり FileReader は close されませんので, 分けて書くようにしましょう... ということになっているようです.