@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Enumerationクラスとジェネリクスについて

投稿者投稿内容
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-03-27 10:21
引用:

実際のところ、ServletRequest はジェネリクスを使っていないんですよね。だから、後方互換性と現在書いているコードを Java 5.0 以上に準拠させるため、型安全性のない Enumeration<?> を使わないといけないという状態になっています。



後方互換性での問題はEnumeration<string> に Enumeration(raw) を警告だけで結局代入できてしまうことだと思いますが。

# wildcardsはたしかになんでも受け入れますが型推論の制約をいろいろ受けますし
# ArrayList<?> とArrayList<Object> では
# ArrayList<?>のgetは呼べますがputはコンパイルエラー


hekigyoku
会議室デビュー日: 2008/12/16
投稿数: 17
投稿日時: 2009-03-27 14:25
よく分からないんですが、スレ主さんは、JDK1.5以上を使っているんじゃないんですか?
JDK1.5使いながらJDK1.3のjavadoc見て調べて意味あるんでしょうかね。

脊髄反射で申し訳ないんですが、何を非難されているのか全く分かりません。

私は、javadoc見ようよ、と言っているだけです。
tama
会議室デビュー日: 2005/08/24
投稿数: 16
お住まい・勤務地: 焼売の国。ベイブリッジ見えません。
投稿日時: 2009-03-27 14:54
hekigyoku氏に同意します。

とりあえず
コード:
String s = (String)e.nextElement();


って書いちゃってる時点で

引用:

ジェネリクスを学んで「型安全性が提供される」という意識があったから、


とはとても言えないと思うな。
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-03-27 16:34
引用:

> 超ど素人プログラマ
その自覚があるならば、背伸びせずに基礎的な入門書を1〜2冊読むか講習に参加した方がいいです。
少なくともTomcatとかジェネリクスとか言う以前のレベルかと。


超ど素人プログラマはちょっと言い過ぎたかもしれません。
1つ言いたい事はこの質問だけで基本からやらないと、とか基礎から入門書をとか言われますが、この質問で預言者でもないのに私がどれだけの知識がもっていて、どの点を復習しなければならないのかなんて分かりますか。
分かるなら、tamaさん、あなたは預言者もしくは占い師でも生計を立てていけると思います。
Tomcatまで否定されなければいけない根拠はどこにあるのでしょうか。
ここで今までたまりかねていたフラストレーションを爆発させてしまいますが、正直人をバカにするのもいい加減にしろって感じです。
皆さんが好き勝手に私に対して言うのは自由です。
だから、今まで基礎から、とか基本をとかいう言葉を真摯に受け止めてきました。
でも、そういう風に言われた側の気持ちにもなってみて下さい。考えてみて下さい。

引用:

いきなり応用から取り組む姿勢は悪くはないですが、ご自身も理解できませんし、ほかの人も助けることはできません。


確かに、今回はジェネリクスという分からない分野が突然出てきました。
でも、1番最初に貼り付けたプログラムを見て下さい。
Enumerationインターフェイスを使用しなければ、ただテキストボックスに何か言葉を入れてただ表示させるだけの簡単なプログラムだと思いませんか。
そこにEnumarationインターフェイスが出てきて、話がジェネリクスにまで及んでしまいましたが、最初はごく単純な質問だったと思いませんか。
tamaさんを含めて皆さんが優秀な方だと言うのは分かります。
だからといって、アドバイスが一様に基礎から、基本からという言葉しか言えないのもどうか、と思います。
未記入
大ベテラン
会議室デビュー日: 2008/02/07
投稿数: 115
投稿日時: 2009-03-27 16:52
引用:

よく分からないんですが、スレ主さんは、JDK1.5以上を使っているんじゃないんですか? JDK1.5使いながらJDK1.3のjavadoc見て調べて意味あるんでしょうかね。


別に何も非難していませんけど。自分の書いているコードが 1.5 でも、使用しているライブラリが 1.5 とは限らないでしょう?

引用:

私は、javadoc見ようよ、と言っているだけです。


あなたの提示した javadoc を読んで何が分かるんでしょう?せいぜい、 Enumeration がジェネリッククラスだということが分かるくらいですよね。スレ主は質問の中で Enumeration<String> と書いているので、Enumeration がジェネリッククラスであることは既に理解しているものと思います。

スレ主は、Enumeration がジェネリッククラスなのに String をいろんなところに書いても上手くいかず悩んだのだと思います。私には「基本から勉強し直せ」と言われるほどひどい質問だとは思えませんでした。

引用:

とりあえず String s = (String)e.nextElement(); って書いちゃってる時点で


ServletRequestがジェネリクスに対応していない以上、Enumeration<?>で受けても (String) でのキャストは必要になります。部分的には正しいコードを書いているのに理解度を疑われるとはスレ主が不憫でなりません。
tama
会議室デビュー日: 2005/08/24
投稿数: 16
お住まい・勤務地: 焼売の国。ベイブリッジ見えません。
投稿日時: 2009-03-27 17:18
Enumeration<String>って書いたなら
(String)はいらないって、ジェネリクス理解してたらわかりますよね?
Enumeration<?>で受けてたらそりゃキャスト要りますけど、
最初に書いてあるコードはそうじゃないですよね?

ServletRequestがジェネリクスに対応していなくてもこれはこの際関係ないと思います。

追記:
最初に提示されたものは
単にEnumration eとなっていますね。ごめんなさい。
私の前の書き込みの発言は取り消させてください。
ジェネリクスはとても便利なので理解できたらもりもりと使ってみてくださいね。


ちなみに
引用:

> 超ど素人プログラマ
その自覚があるならば、背伸びせずに基礎的な入門書を1〜2冊読むか講習に参加した方がいいです。
少なくともTomcatとかジェネリクスとか言う以前のレベルかと。


これを書いたのは私ではないです。

dejavuさんは怒っておられるようですが、
私はいつも自分がわからないことがあれば基礎から見直すようにしています。
とりあえずまずJavaAPIを見てみます。
「基本から」っていうのは馬鹿にしてるとかそういう意味ではないと思いますよ。
ほんとに大事なことなんです。

ところで、
引用:

自分の書いているコードが 1.5 でも、使用しているライブラリが 1.5 とは限らないでしょう?


使用しているライブラリがJDK1.5以上でなければ
Enumeration<String>って書いた時点でコンパイルエラー出ると思いますけど…。


[ メッセージ編集済み 編集者: tama 編集日時 2009-03-27 17:28 ]
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2009-03-27 19:27
なんか、関係無い話が混じってしまってる気がするのでそこに触れないように書きますが

> どこに<String>を挿入してもダメです。
ここから「訳分からず」やってると解釈したんだけど
正直な話、「なんで、ジェネリクスなんて必要なの?」と思ったのでは?

もし、当たっているとしたら、まずは「型の重要性」から学びなおす必要があるのでは?と思った訳です。


っつかね、「フラストレーションを爆発させてしまいますが」という事からしても、
初めの状態は「どして?どして?」という状態だったと想像していましたが。
そんな状態で、WEBで質問しても意味ないでしょ?

# あの状態の吾郎ちゃんに何を説明しても意味無いかと。
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-03-27 19:53
まずは未記入さん、ありがとうございます。
でも、徐々に討論というか論争になってきているのが気がかりです。
皆さん高度な知識をお持ちなのは重々理解しておりますので、それぞれ言い分があるでしょうが、何と言いますか話題の根幹は間違っていないので何も言えないのですが、これからどうなっていくのでしょうか。
引用:

Enumeration<String>って書いたなら
(String)はいらないって、ジェネリクス理解してたらわかりますよね?
Enumeration<?>で受けてたらそりゃキャスト要りますけど、
最初に書いてあるコードはそうじゃないですよね?


これは以前に書きましたが、Enumaration<String>を書いても警告が消えなかったのですね。
ついでに書きますと、私は多分一昨日ですね、ジェネリクスを知ったのは。
最初の方でその点については書いたつもりです。
なので、完璧理解しているのか、と問われればNOです。
それとこれもどこかで書きましたが、今回はまだJava5になる以前の本を使用しています。
その時点で問題だ、と言われればそれまでですが、何て言うんですかね。
古くはありますが、JSP、データベース、Servletに関して使用されるであろうメソッドなどを1つ1つ取り上げている本で、基礎を重視しています。
皆様にお願いが1つあります。
アドバイス等々頂けるのは有り難いですが、一通り目を通してからアドバイスを頂けると幸いです。
引用:

引用:

> 超ど素人プログラマ
その自覚があるならば、背伸びせずに基礎的な入門書を1〜2冊読むか講習に参加した方がいいです。
少なくともTomcatとかジェネリクスとか言う以前のレベルかと。


これを書いたのは私ではないです。


そうですか。それは大変失礼しました。
どこかで読み落としがあったのですね。
引用:

dejavuさんは怒っておられるようですが、
私はいつも自分がわからないことがあれば基礎から見直すようにしています。
とりあえずまずJavaAPIを見てみます。
「基本から」っていうのは馬鹿にしてるとかそういう意味ではないと思いますよ。
ほんとに大事なことなんです。


何事をするにも基本が大事なのは重々承知しています。

スキルアップ/キャリアアップ(JOB@IT)