一回読み終わったので。次は自分なりに消化したく。まとめてみる。
前提
Effective Javaは主に「APIやライブラリを作って保守する人」の目線で書かれている。
でも、僕自身はそんなAPIやライブラリを使って「アプリを作って保守する人」なので。
そっちの目線で見てみたいなーと思うん。
例えば、publicフィールドも別にいいと思うし。
publicメソッドを公開しても、永遠に変えられない、ってことじゃないし。
そういう目線で読みなおしてみようかなと。
順番
本の順番とは関係なく、好きなのから適当にピックアップしていこっと。
その1
項目65 例外を無視しない
catch(Exception ex) {
}
とかしないの。ってことで。仕様的に無視していいってことならなんかコメント書いとく。
あ、でも、closeが投げるIOExceptionはキャッチして捨てることが多いけど
そいうときはcommonsのcloseQuietlyでやっちゃったり。
ってtry-with-resourcesが気になって見てみた。
try-with-resources 文
ってこのへんいろふさんが書いてたな。Java7 体当たり/try-with-resources Statement - 日々常々
ってcloseQuietlyがなんとなく気になってぐぐった。
ほほー。たしかにたしかに。理解せずに書く人がいると危ないね。
Java: closeQuietly considered harmful - sardineの日記
項目57 例外的状態にだけ例外を使用する
例外を通常の制御フローに使うなよってことで。
項目60 標準例外を使用する
NPEとかIAEとかISEとか。(あぁ、EclipseだったらこれでCtrl+Spaceで出てくるのに...#言い訳)
使おうねってことで。主にメソッドの事前条件チェック的な。
事前条件チェックは、SpringのAssertクラスが好きかな。
あと、ThymeleafのAssertのクラスも綺麗だった気がするな。
項目63 詳細メッセージにエラー記録情報を含める
何も書いてないと、何が悪かったんやー!!ってなるよね。
ちゃんと、例外が発生した時にその状況が分かるようにしといてよね。ってことで。
項目48 正確な答えが必要ならば、 float と double を避ける
丸め誤差があるので、お金の計算とかをfloat,doubleでやっちゃだめだよ!BigDecimal使う。
ってか、BigDecimalがもちょっと楽に使えたらいいなぁ。
項目51 文字列結合のパフォーマンスに用心する
"+"で結合するとインスタンスのコピーが作られるからパフォーマンス良くないよ。
特にループの中で使うと影響でかいよ。
そんなときはStringBuilderでつないで最後にtoStringしようね。
項目49 ボクシングされた基本データより基本データ型を選ぶ
基本データ型を選ぶってより、オートボクシング気をつけて!ッて感じ。
- オブジェクト同士の比較にならないようにね。
- NPE発生しないようにね
- ボクシングしすぎてパフォーマンス悪くならないようにね
確か、Thymeleafのプロジェクトにはオートボクシング禁止ってルールあったな。
項目50 他の型が適切な場所では、文字列を避ける
文字列でenumを表現したりbooleanや数字を表現したりせんのやで!
来週
はGebの社内勉強会の資料作りとか準備しようと思うので。
それが終わったら、またまとめていけたらいいな。