Effective Java 第3版を読んだので、本書で紹介されていた全90項目のプラクティスを簡潔にまとめる。
https://www.maruzen-publishing.co.jp/item/?book_no=303408
本記事は第5章「ジェネリクス」の項目について記載する。
第5章 ジェネリクス
一つ以上の型パラメータを宣言に持つクラスやインタフェースは、ジェネリッククラスやジェネリックインタフェースと呼ぶ。
項目26 原型を使わない
原型とは型パラメータなしのジェネリック型のことをいう。
原型を使うと、ジェネリックスの安全性と表現力のすべてを失うため、原型を使うべきでない。
また、原型を使うと実行時に例外がスローされる可能性がある。
項目27 無検査警告を取り除く
ジェネリックスを使うとコンパイラの警告に直面することがある。
多くの無検査を取り除くのは簡単である。
しかし、警告によっていは取り除くのが難しいものもある。
そういった警告に対して、@SuppressWarnings("unchecked")
アノテーションにより警告 を抑制させる。
ただし、警告が発生しているコードが型安全だと示すことができる場合に限る。
SuppressWarningsアノテーションを指定するのは、最小のスコープにすること。
クラス全体に指定しないこと。
また、警告を抑制する理由をコメントアウトしておくこと。
項目28 配列よりもリストを選ぶ
配列とリスト(ジェネリックス)は異なる型規則を持っている。
配列は実行時の型安全性を提供するが、コンパイル時の型安全性は提供しない。
ジェネリックスはその逆。
コンパイル時に検知できるほうが良いので、リストを使うべきである。
項目29 ジェネリック型を使う
ジェネリック型は、クライアントのコードでキャストが必要である型より、安全で使いやすい。
新たな型を設計するときには、クライアントのコードでキャストが不変であることを確認すること。
項目30 ジェネリックメソッドを使う
メソッドを型安全にするには、型パラメータを宣言するようにメソッドを修正して、メソッド内でその型パラメータを使うようにする。
public static <E> Set<E> hoge(Set<E> set1, Set<E> set2) {
Set<E> resultSet = new HashSet<>(set1);
return resultSet.addAll(set2);
}