重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

において
<E>
の意味が分かりません。
これは何を意味していてどう解釈すればいいのでしょうか?
Javaするときにこれに対して気をつけなければならないことは何でしょうか?

A 回答 (1件)

j2SE 5.0 から導入された、Genericsと呼ばれるものです。


以下のサイトが参考になります。

http://www.itarchitect.jp/technology_and_program …
http://www.objectclub.jp/technicaldoc/java/java_ …

簡単に言うと、「型E用のIteratorですよ」ということを明示的にJavaコンパイラに知らせる記述になります。
例えば、何がうれしいかというと
 1. 要素取り出す際にはキャストが必要.
 2. 意図しない型の要素も追加できてしまう.
というCollection系の問題を解決することが出来ます

Genericsを使わない以下のコードで、

List list = new ArrayList() ;
list.add(new Employee(1));
list.add(new Employee(2));
list.add(new Employee(3));
for(Iterator i = list.iterator(); it.has.Next(); ){
 Employee employee = (Employee)i.next();
}

listに入れているのはEmployeeオブジェクトであることは明確なのに、要素を取り出す際にいちいち(Employee)でキャストを行わなければいけず、もし誤って違う型でキャストするような記述をしてしまっても実行時のCast関係の例外が発生するまでわかりません。

一方でGenericsを使うと、


List<Employee> list = new ArrayList<Employee>() ;
list.add(new Employee(1));
list.add(new Employee(2));
list.add(new Employee(3));
for(Iterator<Employee> i = list.iterator(); it.has.Next(); ){
 Employee employee = i.next();
}

となります。
まず、iをIterator<Employee>部分で「Employee用のIteratorだよ」ということを宣言しているので、i.next()の部分でキャストする必要がありません。
また、List<Employee> listと宣言しているので、仮に誤ってEmployee以外のオブジェクトをlistに追加しようとしてもコンパイル時に検出することが出来ます。
    • good
    • 0
この回答へのお礼

よく分かりました。
ありがとうございました。

お礼日時:2007/06/24 14:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!