アットウィキロゴ

ジェネリックス 型をパラメータ(変数)化

ジェネリックスとは?
型をパラメータ(変数)化することによって、それを使用する時まで
実際の型を決めなくてもよくするための機構。
 
型パラメータという記述方式を用いる
ジェネリックス対応クラスの型名<使用する型名>
 
 ArrayList<String>
 HashMap<String, Integer> 
  HashMapは、2つの型パラメータを指定する
 
例
----------
ArrayList<String> list = new ArrayList<String>();
----------
 通常の型名を記述する部分を型パラメータで記述する
 
注意! 型パラメータの指定には参照型のみ使用可、基本データ型はダメ
----------
ArrayList<int> list = new ArrayList<int>();
----------
これ↑はダメ
 
ジェネリックスを定義している側のクラスでは、
型パラメータを変数のように定まっていないものとして
扱わなければならない、具体的な型名が書かれておらず
(メソッドの変数名のように)名前をつけて表現されている。
E K V など、アルファベット大文字が慣例となっている。
 
それぞれのアルファベットは
 
E → Element
K → Key
V → Value という意味らしい。
 
例
この定義は
----------
ArrayList<E>
----------
↓実際に使うときにこうなる
----------
ArrayList<String>
AllayList<Integer>
ArrayList<MyClass>
----------
 
この定義は
----------
HashMap<K, V>
----------
↓実際に使うときにこうなる
----------
HashMap<String, Integer>
HashMap(String, MyClass>
HashMap<Integer, MyClass>
----------
 
※型パラメータを省略すると Object型 が指定されたとして扱われる。
 
■メソッドと型パラメータ
~Java APIより~
ArrayList<E>のメソッド
 boolean add(E object) 「E」がパラメータにつけられている名前
 E get (int index) 
 
ジェネリックスを利用する場合には、オブジェクト生成時に型パラメータを指定する
----------
ArrayList<String> list = new ArrayList<String>();
----------
この時点で、使用できる型がStringに限定されて
----------
ArrayList<String>のメソッド
 boolean add(String o)
 String get(int index)
----------
Stringオブジェクト専用になる
----------
ArrayList<String> list = new ArrayList<String>();
 list.add("文字列"); //String型なのでOK
 list.add(new Integer(10)); //String型以外なのでNG
----------
 
----------
ArrayList<Integer> list = new ArrayList<Integer>();
 list.add("文字列"); //Integer型以外なのでNG
 list.add(new Integer(10)); //Integer型なのでOK
----------
 
■<? extends X>とは
ArrayList(Collection < ? extends x > c)
 引数に受取れるのは「Eを継承している何らかのクラス専用として生成されたCollectionオブジェクト」
 
? extends E
 EもしくはEのサブクラスという意味

タグ:

+ タグ編集
  • タグ:
最終更新:2008年05月27日 22:45