ジェネリクスの歴史を振り返る

Android用語集

カテゴリー: Java  閲覧数:462 配信日:2013-06-23 11:25


Java5.0未満


2004年にJavaバージョンが5.0となるまで、Javaにジェネリクス機能はなかった
・キャストに失敗した場合、原因箇所を特定するのはとても骨の折れる作業だった
・要素を Collection から取り出すときは、要素を「コレクションに格納されている要素の型」にキャストする必要があった

Collection系の問題
1. 要素取り出す際にはキャストが必要
2. 意図しない型の要素も追加できてしまう
※コンパイラはキャストがコレクションの型と同じであるかどうかをチェックしないため、実行時にキャストが失敗する恐れがあった

List list = new ArrayList();
list.add("a");
String str = (String) list.get(0);

Java5 / Java6


ジェネリクス導入
・目的の型へのキャストが省略可能
・間違った型で扱ってしまっても、コンパイル時点でエラーとなるので間違いが非常に発見しやすい
・ListやMap等のコレクションを返すメソッドの場合、何の型を扱っているかが明白

メリット
・ジェネリクスを使用すると、コレクションの型をコンパイラに通知できるため、型のチェックを行うことができる
・コンパイラがコレクションの要素の型を認識すると、そのコレクションを矛盾なく使用していることをチェックでき、コレクションからの値の適切なキャストを挿入できる

List<String> list = new ArrayList<String>();

Java7


ジェネリックな変数にnewでインスタンスを生成して代入するというケースで、冗長表記を簡素化出来る
・後のStringを省略可能
List<String> list = new ArrayList<>();