Media Five Co. 夢に近づくためにできることから始めてる。
エンジニアの独り言…
「JDK1.5/Generics」

『JDK1.5/Generics』

以前、本コラムで、
Java 2 Platform, Standard Edition 1.5(Tiger)について、
少し触れました。

今回は、その時少し触れました「Generics」についてです。

◆ Generics(ジェネリック)とは
JavaのGenericsとは、JavaのCollectionでの型を決める機能です。
通常のCollectionは要素の型は任意ですが、そのためにコンパイル時にはエラーにならず、
実行エラーを引き起こす要因になります。


1.<従来の記述>
List list = new ArrayList();
list.add(new Integer(1));

Integer inte = (Integer)list.get(0);

これまでの記述では、Listオブジェクトに要素を追加する際は、
ラッパークラスを用いて追加を行っていました。
また、追加した要素にアクセスする際は、get()メソッドの返り値が
Object型で返ってくるので、任意の型にキャストする必要がありました。


2.
List list = new ArrayList();
list.add(1);

Integer inte = list.get(0);

JDK1.5では、Genericsを用いると上記のようなコードを
記述することができます。
Listのオブジェクトを生成する際に、と書くことで、
Integer型に特化したインスタンスが生成されます。
これで、add()メソッドを使って要素を追加する時に、

list.add(new Integer(1))

ではなく、

list.add(1)

と記述することが出来ます。
また、get()メソッドで、要素にアクセスする際も、
1.のようなキャストの記述が不要になり、
2.のような記述で要素へのアクセスが可能となります。

Integer inte = list.get(0);


また、例えば、2.のコードの

list.add(1)



list.add("1") ←String型の引数

に変えたとします。
そうすると、今度はコンパイル時に以下のエラーが発生します。

[コンパイルエラーの内容]
GenericsSample.java:7: シンボルを見つけられません。
シンボル: メソッド add(java.lang.String)
場所 : java.util.List の インタフェース
list.add("1");

add()メソッドの引数は、Object型なので一見良さそうに見えますが、
インスタンス生成時に、Genericsを用いてInteger型に特化したインスタンスを
作っていますので、上記の list.add("1") のようにInteger型以外の
引数は受付けられなくなっています。



Genericsを用いることで、コードが簡素化し見やすくなり、
実行前に型のチェックできるようになりました。
最近のJavaではEoD(Ease of Development)という言葉を良く聞きますが、
Genericsはそれが実現された機能だと思います。

[Sun J2SE 1.5詳細]
http://java.sun.com/developer/technicalArticles/releases/j2se15/

Last Update : 2005/03/15
 
Copyright (C) 2004 Media Five Co. - Tech All Rights Reserved.
BACK TOP HOME