プロが教える店舗&オフィスのセキュリティ対策術

javaのジェネリックスでTとEの違いが良く分かりません。
参考書に
「E」は(Element:要素)
「T」は(Type:型)
と書いていますが、この二つの使い分けが良く分かりません。

「Eに入るのが要素なら、要素ってコレクションのオブジェクトことで…でもオブジェクトは型から作るからTで…どっちを使えばいいか分からない orz」

インターネットで調べると「T」はテンプレート?

と、こんがらがってます。プログラムに関して全くの素人で、基本的な考え方がしっかりしていないので、おかしいことを聞いてるのかもしれませんが、どなたかよろしければ回答お願いします。

A 回答 (3件)

「T」「E」などの型パラメータ名は、コンピュータにとっては何であっても違いは有りません。

変数名などと同様です。(もちろん「for」などの予約語は使えませんが。)
動作さえすれば良いのであれば、「HOGE」などでもかまいません。

例) public <HOGE> HOGE name(HOGE h) { ・・・・・ }

ですが、「HOGE」などでは書いた人の意図が分からず、プログラムが理解しづらくなります。
ですので、(未来の自分も含めた)そのプログラムを読む人が分かりやすいようなものにするのが定石です。

標準ライブラリで例を挙げると、下記の様になっています。

・ java.util.Collection<E> の場合は要素(Element)の型を指定するので「E」
・ java.util.Map<K,V> の場合はキー(Key)と値(Value)の型を指定するので「K」「V」

標準ライブラリでも、単純な概念に当てはまらない場合などは「T」としているようですが、「T」という名前は「これは型パラメータですよ」ということしか表現していません。他に適切な名前があれば、そちらにした方が良いでしょう。
ただし、ぱっと見て型パラメータである事が分かるという意味では「HOGE」などよりは良いです。

参考URL:http://www.javainthebox.net/laboratory/J2SE1.5/L …
    • good
    • 2
この回答へのお礼

>標準ライブラリでも、単純な概念に当てはまらない場合などは「T」としているようですが、「T」という名前は「これは型パラメータですよ」ということしか表現していません。他に適切な名前があれば、そちらにした方が良いでしょう。

そういうことだったんですね。モヤモヤがスッキリしました。教科書にもこういう風に書いていてもらいたいです。ありがとうございました。

お礼日時:2010/08/05 11:08

ジェネリックスのAPIで


 java.util.Comparator<T>
 java.util.Enumeration<E>
 java.util.Map<K,V>
といったものがありますけど、「T」「E」「K」「V」というのは単なる記号みたいなもので、どう表現してもいいのです。気にする必要はないです。

プログラムするときに
 HashMap<String, Date> map = new HashMap<String, Date>();
このように具体的なクラス名に置き換えて使うのです。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。資格試験の勉強していて「わからない所を無くさないといけない!ここはきっと重要な箇所だ」と思っていたのですが、気にする必要のないところでしたか(*´ω`*)

お礼日時:2010/08/05 11:01

ん~, あんまり気にする必要ないと思うなぁ....

    • good
    • 2
この回答へのお礼

回答ありがとうございます。どうも気になってしまってしかたがなくなるのです^^; 気にしすぎる人はプログラマに向いてないですかねぇ・・・

お礼日時:2010/08/05 10:50

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