2012-03-13 5 views
0

私は私のコードで簡単な間違いがあると思うが、私はそれを見つけることができません。リスト内のオブジェクトを読み込む。キャストすることができません

私はオブジェクト(エンティティのタイプ)のリストを持っていて、リスト内のオブジェクトの内容を読みたいと思います。

object.get(1).getTitle(); 

List<HtMeldungen> meldungen = q.getResultList(); 

List<MeldungsBean> meldungsliste = new ArrayList(); 
MeldungsBean mb = null; 
HtMeldungen tempMeldungen = null; 

int i = 0; 
int k = meldungen.size() - 1; 

for (i = 0; i < k; i++) { 
    mb = new MeldungsBean(); 
    tempMeldungen = (HtMeldungen) meldungen.get(i); 

    mb.setTitel(tempMeldungen.getTitle()); 
    mb.setAutor(tempMeldungen.getAutor()); 
    mb.setMeldungstext(tempMeldungen.getText()); 

    meldungsliste.add(mb); 
} 

meldungenという名前の私のリストはタイプHtMeldungenのオブジェクトで満たされている:のような私の意見を何かで

私はエラーを取得する:

DBEntities.classic.HtMeldungen cannot be cast to DBEntities.classic.HtMeldungen 

誰も私を助けることができますか?

+2

このリストにはどのような種類のオブジェクトがありますか?彼らはHtMeldungenかその拡張ですか?あなたはリストをトラバースするためにイテレータを使用する必要があります。 – Adrian

+0

HtMeldungenはMeldungsBeanのサブクラスですか? – user1242756

+1

は実行時の例外またはコンパイル時ですか? – jabal

答えて

0

q.getResultList()HtMeldungenのインスタンスを持つリストを取得していますか?あなたのコンパイラのスイッチに依存 - - 文法的に正しいが、リストは、あなたが得る別のクラスのインスタンスを含む、以降の行で

tempMeldungen = (HtMeldungen) meldungen.get(i); 

でき ていない場合は、その行

List<HtMeldungen> meldungen = q.getResultList(); 

ですあなたの例外は、コンパイラが実際にはHtMeldungenのインスタンスでなければならないと考えるからです。 あなたの仮定が間違っている必要がありますならば、あなたが理解しやすいエラーを取得するコード

if (meldungen.get(i) instanceof HtMeldungen) { 
    tempMeldungen = (HtMeldungen) meldungen.get(i); 
} else { 
    throw new RuntimeException("Got instance of class " + meldungen.get(i).getClass()); 
} 

を試してみてください。

0

I'll get the error: DBEntities.classic.HtMeldungen cannot be cast to DBEntities.classic.HtMeldungen

エラーメッセージがHtMeldungenの目的は、(矛盾しているようだ)HtMeldungenにキャストできないことを示しているので、私はあなたのビルドに二回、このクラスのロードを持っているかもしれないと思うだろう。ビルドパスに同じjarファイルが2回ビルドされているかどうかを確認してください。これが通常このエラーの原因です。

関連する問題