Effective java 3版 読書会 7日目

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

項目26 原型を使わない
ListやSetで原型を使う事は殆どない。
実行時にエラーとなるので、原型を使うべきでない。
原型だとコンパイルエラーとならないがWarningが出るのできちんとしたパラメータを指定する事
原型はキャストしないと取り出せないので不便
Rubyなど動的型言語のユーザーは気を付けるべき
クラスリテラルとinstanceofを使用する時はジェネリクスを使用しない

項目27 無検査警告を取り除く
基本的に無検査警告を抑制することは無い
どうしようもない時以外は、SuppressWarningsを付けない。
例として、P126の下に、T型が不明な時にキャストしており、エラーが出るのでSuppressWarningsを付けている。
その場合、コメントを付ける必要がある。
必要となる場所以外ではSuppressWarningsは付けるべきでない。
メソッド全体でSuppressWarningsする様な事はしない。
まとめ:
本当に回避不可能な場合のみ以外は、SuppressWarningsは付けるべきでない。

項目28 配列よりリストを選ぶ
配列は共変(継承関係にあるものを互換性を認める)
ジェネリクスは不変(厳密に型の違いを判別する)
配列よりListなどの方が型安全性が高い。
コンパイル時にチェックしてくれる。
まとめ:
なるべくなら、配列よりListなどを使用するべき

項目29 ジェネリック型を使う
クライアント側でキャストすると、実行時にキャストエラーとなるので
クラスをジェネリクス型とするべき。
Objectを使うより、ジェネリクスを使うべき。
Objectの配列をE型にキャストする方法が良く用いられる。
フィールドをオブジェクトにして変換する方がより良いと思われる。
配列よりもListを使った方が良いかも知れない。
⇒P133の例は、Listを使用できない場面での例
 ArrayListなどのジェネリクス型は配列を使用して実装しなければならない。
パフォーマンスを考える時は、配列を考えるべき
その場合は、P134の例の通りに記述するべき
疑問:Javaはリストを直接サポートしていない⇒意味が不明
まとめ:
クライアントでキャストをするよりも、ジェネリクス型でクラスを設計するべき。

項目30 ジェネリックメソッドを使う
現場では、重複しているソースをジェネリクスで書き換える作業が有った。
ストリームやファンクションは、ジェネリクスを使用せずには作れない。P139真中、再帰型境界は余り意識していないで使われる事が多い
型パラメータ自身が関係する式で制限されること。
まとめ:
型パラメータの安全性を考えて、ジェネリクスメソッドを使って行くべき

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

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