Effective java 3版 読書会 8日目

実施日時:2019/2/6 22:00~23:00
対象範囲:項目31~項目36
参加者:yodai、yoridori、kassyi
形式:オンライン(discord)
   課題本を事前に読み、実業務と照らし合わせて記述内容の
   議論をする。

項目31 APIの柔軟性向上のために境界ワイルドカードを使う
プロデューサーとコンシューマとの違いはしっかり意識すること。
間違えるとコンパイルが通らないのでコンパイラに任せても良い。
境界ワイルドカードは、Integerをビッグデシマルにする所で使用したことは有るが自作することは殆ど無い。
パブリックな場合、単純な"?"のワイルドカードではなく、境界ワイルドカードにする。

項目32 ジェネリックと可変長引数を注意して組み合わせる
本項は、@SafeVarargsの使い方を記述している様に見える。
しかし、@SafeVarargsを使うぐらいなら設計を見直す方が良い
代替手段としてListを使用する事が多い。
そもそも、可変長引数自体殆ど使わない。

項目33 型安全な異種コンテナを検討する
一つ大きなクラスを作って、型をキーにして値を詰める様にしている。
ライブラリやフレームワークを作る場合に使えるが、普段は使わない
P156の異種コンテナの注意点は、お気に入りのStringの配列は取得できるが
お気に入りのList<String>は保存できない。

項目34 int定数の代わりにenumを使う
値が固定されているならenumが良い。
0と1しかない場合はやる必要が無い。
4つか5つ位で一つのまとまりがあり、値が固定ならenumにする必要がある。
enumならグループ化ができて値に名前が付けられるので便利
現場では、1ファイルで1つのenumを作成する。
共通の項目の場合は、複数のenumを1ファイルにまとめて記述する事も有る。
enumにメソッドを定義して処理をする事は現場では殆ど見ない。
戦略enumパターン、例として週末と平日で計算方法を変える場合に使う。
switchを書くよりもシンプルに記述できる。

項目35 序数の代わりにインスタンスフィールドを使う
ordinalは危ないので使用しない。
どうしても順番を使うなら、順番をコンストラクタで定義して使用する。

項目36 ビットフィールドの代わりにEnumSetを使う
ビットフィールドではなく、EnumSetを使用する。
enumSetに渡す時、インターフェースで定義

余談:
Serializeはオブジェクトを渡して渡した先で実行する場合に使う。
しかし、現在はユーザー側で意識して使う事は殆ど無いと思われる。
例としてCORBAが有る
http://www.atmarkit.co.jp/ait/articles/0103/08/news002.html

協力:Tech Baton
https://tech-baton.studio.design/

この記事が気に入ったらサポートをしてみませんか?