- PR -

継承でのCastエラーの問題

1
投稿者投稿内容
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2006-12-25 15:01
継承で下記のように親子関係があり、キャストしようとするとjava.lang.ClassCastExceptionで落ちてしまいます。

親子関係
ArrList Extends java.util.List

public List AAA(){
return new List();
}

public ArrList BBB(){
return (ArrList)AAA(); ← ClassCastException 発生
}

ご存知でしたら教えてください。
よろしくお願いします。


[ メッセージ編集済み 編集者: タラン 編集日時 2006-12-25 16:31 ]
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 2006-12-25 15:52
不正なダウンキャストを行っているためです。

件のコードでは、変数listが示すオブジェクトが
ArrList型かそのサブクラスでない限り、
ClassCastExceptionが発生します。

ダウンキャストについては、こちらをご覧下さい。
http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000107.html
Gio
ぬし
会議室デビュー日: 2003/11/28
投稿数: 350
お住まい・勤務地: 都内から横浜の間に少量発生中
投稿日時: 2006-12-25 15:54
引用:

タランさんの書き込み (2006-12-25 15:01) より:

親子関係
ArrList Extends List

public List AAA(){
return (list);
}

public ArrList BBB(){
return (ArrList)AAA(); ← ClassCastException 発生
}



List が java.util.List のことであれば ArrList implements List のはずですし、AAA() が返す list が定義されていません。
簡略化するのはよろしいのですが、検証可能なコードと実際のスタックトレースを書き込むようお願いいたします。

# 提示されたサンプルでは、list の型が List には適合するけれども ArrList ではない可能性が強いことしかわかりません。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-12-25 16:00
アップキャストは絶対に失敗しませんが、
ダウンキャストは、必ず成功するとは限りません。

例えば、
「犬(ArrayList)」でも「猫(ArrList)」でも、必ず「『動物』と書いてある箱(List)」に入れることはできます。
逆に、「『動物』と書いてある箱(List)」があった場合、
取り出した動物が「犬(ArrayList)」だったら、「犬(ArrayList)」または「動物(List)」として扱うことができますが、
「猫(ArrList)」として扱うことはできないのです。
この場合重要なのは、『「猫(ArrList)」は「犬(ArrayList)」を継承していない』ということです。

この辺が理解できれば、もうオブジェクト指向から離れられなくなりますよ。w
がんばって勉強してください。

「追記」
具体的にArrayListとあるのはサンプルとして挙げたまでです。

[ メッセージ編集済み 編集者: Edosson 編集日時 2006-12-25 16:03 ]
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-12-25 16:20
引用:

タランさんの書き込み (2006-12-25 16:07) より:

何が足りないのか良く分からないです。
継承してるからできると思ってましたが、なかなかエラーの原因が分からないです。


皆さんの投稿、ちゃんと読んでます?
何を継承しているのか、何を継承していないのか、ちゃんと確認しましょう。

「追記」
新しく投稿されたコードも、一番肝心なところが抜けてるし。
つっても、デバッグの肩代わりなんてごめんですが。

[ メッセージ編集済み 編集者: Edosson 編集日時 2006-12-25 16:21 ]
タラン
大ベテラン
会議室デビュー日: 2004/03/17
投稿数: 138
投稿日時: 2006-12-25 16:35
できました。^^
大変騒がしてしましましてごめんなさい。
お答えありがとうございました。

1

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