- - PR -
継承でのCastエラーの問題
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 ] | ||||
|
投稿日時: 2006-12-25 15:52
不正なダウンキャストを行っているためです。
件のコードでは、変数listが示すオブジェクトが ArrList型かそのサブクラスでない限り、 ClassCastExceptionが発生します。 ダウンキャストについては、こちらをご覧下さい。 http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000107.html | ||||
|
投稿日時: 2006-12-25 15:54
List が java.util.List のことであれば ArrList implements List のはずですし、AAA() が返す list が定義されていません。 簡略化するのはよろしいのですが、検証可能なコードと実際のスタックトレースを書き込むようお願いいたします。 # 提示されたサンプルでは、list の型が List には適合するけれども ArrList ではない可能性が強いことしかわかりません。 | ||||
|
投稿日時: 2006-12-25 16:00
アップキャストは絶対に失敗しませんが、
ダウンキャストは、必ず成功するとは限りません。 例えば、 「犬(ArrayList)」でも「猫(ArrList)」でも、必ず「『動物』と書いてある箱(List)」に入れることはできます。 逆に、「『動物』と書いてある箱(List)」があった場合、 取り出した動物が「犬(ArrayList)」だったら、「犬(ArrayList)」または「動物(List)」として扱うことができますが、 「猫(ArrList)」として扱うことはできないのです。 この場合重要なのは、『「猫(ArrList)」は「犬(ArrayList)」を継承していない』ということです。 この辺が理解できれば、もうオブジェクト指向から離れられなくなりますよ。w がんばって勉強してください。 「追記」 具体的にArrayListとあるのはサンプルとして挙げたまでです。 [ メッセージ編集済み 編集者: Edosson 編集日時 2006-12-25 16:03 ] | ||||
|
投稿日時: 2006-12-25 16:20
皆さんの投稿、ちゃんと読んでます? 何を継承しているのか、何を継承していないのか、ちゃんと確認しましょう。 「追記」 新しく投稿されたコードも、一番肝心なところが抜けてるし。 つっても、デバッグの肩代わりなんてごめんですが。 [ メッセージ編集済み 編集者: Edosson 編集日時 2006-12-25 16:21 ] | ||||
|
投稿日時: 2006-12-25 16:35
できました。^^
大変騒がしてしましましてごめんなさい。 お答えありがとうございました。 |
1