- PR -

Vector型配列の宣言方法について

投稿者投稿内容
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-04 10:03
Generics以前に、型や型変換のなんたるか自体を、把握できていないようですが…。
Genericsはあくまで補助的な機能なので、基本ができてないと使えないですよ。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2007-07-04 10:11
ここで出ている互換性がないエラーは
ClassCastExceptionのことです。

これでご理解できない場合は基本が出来ていないと思わざるを得ません。

Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2007-07-04 10:29
をを、手厳しい。<自分のことは棚に上げて
<追記>これは余計か。今さらだけど。orz</追記>

Genericsって、明示的に要素の型を拘束できるので、
むしろ初心者にこそ、きっちり仕込んでおくべき、と
考える私は、少数派なのでしょうか。

基本ってのは、ずらずら並べてどうなるってものでもないですが、
エラーメッセージを読んで、それを勉強のネタにする、ってのは
それこそ最低限ですね。

[ メッセージ編集済み 編集者: Edosson 編集日時 2007-07-04 10:38 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-07-04 14:13
引用:

String[] s = new String[2];
s = adrs.elementAt(i); ←問題の箇所


VectorからelementAtしたらジェネリクスの型が帰るでしょう?
今の場合はString型。
sはString[]型だから型が違う。

投稿する前に落ち着いてコンパイルエラーのメッセージをよく読みましょう。

なお、VectorはJDK1.0のころの化石のようなクラスです。
elementAtメソッドもそのころの名残です。あまり使わないほうがいい。

コード:
List<String> list = new ArrayList<String>();
String s = list.get(0);


といったように、インターフェースListで定義し、
newした具象型を意識しない作りにすることが推奨されます。
Vectorに定義されているelementAt()を使うのではなく、
Listインターフェースに定義されているget()を使うべき。
こうしてあると具象型がArrayListだろうがVectorだろうがLinkedListだろうが、
ソースは互換が保たれる。
あえてVector型である必要がないならより上位の型で宣言しましょう。

未記入
会議室デビュー日: 2007/07/03
投稿数: 8
投稿日時: 2007-07-04 16:21
拝承
nagiseさん

丁寧なご指摘と解答有難うございます。
Vectorはもう古いのですね。。。

今4年ぶりにJavaをやることになり、再度勉強を始めているところです。
周りにJavaを知っている人が一人もいないので、つい投稿に頼ってしまいました。

なのでnagiseさんのような指摘はとても助かります。
有難うごさいます。

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