- ベストアンサー
javaのジェネリックスでTとEの違いが良く分かりません。
javaのジェネリックスでTとEの違いが良く分かりません。 参考書に 「E」は(Element:要素) 「T」は(Type:型) と書いていますが、この二つの使い分けが良く分かりません。 「Eに入るのが要素なら、要素ってコレクションのオブジェクトことで…でもオブジェクトは型から作るからTで…どっちを使えばいいか分からない orz」 インターネットで調べると「T」はテンプレート? と、こんがらがってます。プログラムに関して全くの素人で、基本的な考え方がしっかりしていないので、おかしいことを聞いてるのかもしれませんが、どなたかよろしければ回答お願いします。
- みんなの回答 (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」などよりは良いです。
その他の回答 (2)
- すもあん(@ryoyama)
- ベストアンサー率56% (45/80)
ジェネリックスの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>(); このように具体的なクラス名に置き換えて使うのです。
お礼
回答ありがとうございます。資格試験の勉強していて「わからない所を無くさないといけない!ここはきっと重要な箇所だ」と思っていたのですが、気にする必要のないところでしたか(*´ω`*)
- Tacosan
- ベストアンサー率23% (3656/15482)
ん~, あんまり気にする必要ないと思うなぁ....
お礼
回答ありがとうございます。どうも気になってしまってしかたがなくなるのです^^; 気にしすぎる人はプログラマに向いてないですかねぇ・・・
お礼
>標準ライブラリでも、単純な概念に当てはまらない場合などは「T」としているようですが、「T」という名前は「これは型パラメータですよ」ということしか表現していません。他に適切な名前があれば、そちらにした方が良いでしょう。 そういうことだったんですね。モヤモヤがスッキリしました。教科書にもこういう風に書いていてもらいたいです。ありがとうございました。