2012-03-15 11 views
0

オブジェクトをBeanクラスに型キャストしようとしていますが、ClassCastException例外が発生します。ClassCastExceptionの取得

Hashtable listEvent = getEvents(label1.getText(), str); 

    Enumeration events = listEvent.keys(); 
    while (events.hasMoreElements()) { 
    String key = (String) events.nextElement(); 

    if (key.equals(label1.getText())) { 

     Vector object = (Vector) listEvent.get(key); 

     Enumeration hashtable = listEvent.keys(); 
     while (hashtable.hasMoreElements()) { 
      String keys = (String) hashtable.nextElement(); 
      if (keys.equals(label1.getText())) { 

    Vector data = (Vector) listEvent.get(keys); 
     for (int i = 0; i < data.size(); i++) { 
     EventsBean bean1 = (EventsBean) data.elementAt(i); 

EventsBeanに型キャストするためのアプリケーションの実行中にエラーが発生します。

+0

明らかに、 'data'には少なくともEventsBean型のインスタンスではない*いくつかの要素が含まれています。何があなたに 'データ'がそのタイプだけを含むと信じさせましたか? –

+0

'System.out.println(data.elementAt(i).getClass())'は何をするのでしょうか?キャスティングの直前に置きます。 –

+3

ジェネリックスを使用していないのはなぜですか?これらのキャストを一式削除する必要がありますか? –

答えて

3

まず、RAWタイプ(Map<String, List<EventsBean>>ではなくHashtable)の代わりにジェネリックコレクションを使用した場合、これらのエラーはコンパイラによってキャッチされます。

ベクター、ハッシュテーブル、列挙型は忘れてしまいます。 Java 1.2以降は使用しないでください。

最後に、値directyを検索するのではなく、なぜハッシュテーブルのキーを反復していますか?代わりに

Enumeration events = listEvent.keys(); 
while (events.hasMoreElements()) { 
    String key = (String) events.nextElement(); 
    if (key.equals(label1.getText())) { 
     Vector object = (Vector) listEvent.get(key); 

Vector object = (Vector) listEvent.get(label1.getText()); 

は、あなたの質問に答えるために使用します。あなたはClassCastExceptionが取得する場合、それがコレクションに格納されたオブジェクトは、あなたは彼らが何を考えていないことを意味し。コレクションを満たすコードを確認します。

+0

私のプロジェクトは完全にVectorとHashtableを持っていますが、どうすればこの問題を解決できますか?現在プロジェクトを変更できません。ほとんどのクラスに影響します。 – user1195292

+0

一時的な修正は利用できません。 – user1195292

+1

少なくともVector とHashtable >を使用してください。 –