4 Stimmen

Typ-Casting-Problem mit Java for-each-Schleife

Ich habe ein Problem mit einer Anwendung, die ich entwickle, verfolgt, es gibt mir einen Typ Cast Ausnahme. Das Komische ist, dass es sagt, es kann nicht casten "entities.Movie kann nicht auf entities.Movie gecastet werden"?! movies ist eine ArrayList.

    try {
        movies = getMovies();
    } catch (Exception e) {
        e.printStackTrace(System.out);
    } finally {
        try {
            for (Movie movie : movies) {
                output.append("                 <tr>\n");
                output.append("                     <td>" + movie.getId() + "</td>");
                output.append("                 </tr>\n");
            }
         } catch (Exception e) {
             e.printStackTrace(System.out);
         }
     }

7voto

Péter Török Punkte 111735

Das klingt nach einem Classloader-Konflikt. Dieselbe Klassendefinition, die von verschiedenen Classloadern geladen wird, wird von der JVM als zwei verschiedene Klassen angesehen.

Mit diesen wenigen Informationen gibt es nicht viel mehr zu sagen. Siehe dieser Artikel für Details über Classloader und ihre Probleme.

Siehe auch dies eine frühere Antwort von mir auf ein ähnliches Problem .

4voto

John Smith Punkte 321

Möglicherweise ein Problem mit dem Klassenlader (wenn Ihre Anwendung mehr als einen hat)

Schauen Sie sich in einem Debugger die Class-Objekte aus dem getClass()-Aufruf für ein Mitglied von movies an und vergleichen Sie sie mit denen für ein lokal konstruiertes Movie-Objekt.

Wenn sie unterschiedlich sind, können Sie so möglicherweise zurückverfolgen, was passiert ist. Anhand des Klassenobjekts können Sie sehen, welcher Klassenlader die Definition geladen hat.

Wenn Sie zwei verschiedene Klassendefinitionen geladen haben, müssen Sie herausfinden, wo Ihre JAR-Datei zweimal geladen wird.

0voto

Stephen C Punkte 665668

Zusätzlich zu dem Classloader-Problem vermute ich, dass Sie auch einige unsichere Typkonvertierungen irgendwo mit einem Collection<Movie> Instanz oder ähnliches.

0voto

Matt MacLean Punkte 18554

Überprüfen Sie, ob beide Klassen mit der gleichen Java-Version kompiliert wurden.

0voto

Nico Punkte 1836

Ich vermute auch ein Classloader-Problem, aber Sie könnten auch überprüfen, dass Ihr nicht ein serialversionuid Problem haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X