回答編集履歴

1

サンプルコードを記述

2018/05/27 13:15

投稿

退会済みユーザー
test CHANGED
@@ -1,7 +1,91 @@
1
- try-resourceを使え
1
+ try-with-resource を使え
2
2
 
3
3
  reader.closeでヌルポ
4
4
 
5
5
  例外メッセはわかるが発生箇所がわからん(例外オブジェを渡してスタック表示できん?)
6
6
 
7
7
  ログレベルがシステム停止を指すと思われるのに処理が続行されている
8
+
9
+
10
+
11
+ # 詳細化(第一弾)
12
+
13
+
14
+
15
+ ```java
16
+
17
+ BufferedReader reader = null;
18
+
19
+ try {
20
+
21
+ reader = new BufferedReader(new FileReader(file));
22
+
23
+ String line;
24
+
25
+ while ((line = reader.readLine()) != null) {
26
+
27
+ // ...
28
+
29
+ }
30
+
31
+ } catch (IOException e) {
32
+
33
+ // exit を行わないので warn レベル以下とすべきである
34
+
35
+ // 例外情報は ログフォーマットにて制御させるため渡す必要あり
36
+
37
+ // ここ以外は多分許容されただけだと思われる。
38
+
39
+ // また ログレベルに関しては適切なものを選んでください。
40
+
41
+ log(Level.WARNING, e.getMessage(), e);
42
+
43
+ } finally {
44
+
45
+ try {
46
+
47
+ // NullPointerException は発生しても握りつぶすのではなく
48
+
49
+ // 発生しないように対策をする。(例外コスト削減)
50
+
51
+ if (reader != null) reader.close();
52
+
53
+ } catch (IOException e) { // 無視する例外は IOException だけと明示する
54
+
55
+ // nop // 処理を入れてないことを明示する
56
+
57
+ }
58
+
59
+ }
60
+
61
+ ```
62
+
63
+ あたりになるでしょう。
64
+
65
+ また [try-with-resource ] をりようすると
66
+
67
+
68
+
69
+ ```java
70
+
71
+ try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
72
+
73
+ String line;
74
+
75
+ while ((line = reader.readLine()) != null) {
76
+
77
+ // ...
78
+
79
+ }
80
+
81
+ } catch (IOException e) {
82
+
83
+ log(Level.WARNING, e.getMessage(), e);
84
+
85
+ }
86
+
87
+ ```
88
+
89
+
90
+
91
+ で上記コードとほぼ同一になります。