ジェネリックは、コンパイル時に実行時例外を検出するために使用されます。
List
to storeを作成し、Strings
それをメソッドに渡したと仮定します.. enhanceList(List)
.. 実行後、リストを反復処理してすべての文字列を取得します。
Genercisの前は、enhanceList(List)
メソッドが他のタイプのオブジェクトをリストに追加する可能性がありましたClassCastException
void someMethod() {
List listOfStrings = new List();
enhanceList(listOfStrings);
for(Iterator i : listOfStrings.iterator(); i.hasNext();) {
String s = (String) i.next(); //RuntimeException here
}
}
void enhanceList(List l) {
l.add(new Integer(1)); //error code
}
genericsを使用すると、リストに含まれるオブジェクトのタイプを非常にうまく「バインド」できます
void someMethod() {
List<String> listOfStrings = new List<String>();
enhanceList(listOfStrings);
for(String s : listOfStrings) {
//no error here
}
}
void enhanceList(List<String> l) {
l.add(new Integer(1)); //compile-time error
}
ただし、ジェネリクスは注意して使用する必要List<Object>
があります。バインディング タイプではあまり役に立ちません。これは、任意のオブジェクトを保持できるためです (オブジェクトはすべての Java クラスのスーパー クラスであるため)。常に特定のタイプのリストを作成することをお勧めします。