Frage

Ich bin im Begriff, einen C # -Projekt in Java portieren. Ich habe ein Stück Code bekam das wie folgt aussieht:

public abstract class A
{
    public abstract void foo() throws Exception;
    public abstract void bar();
}

Und dann an anderer Stelle ...

public class FirstOuterClass {
    public class FirstInnerClass extends A {
                  // defines foo() and bar()
    }
}

Weitere anderswo ...

public class SecondOuterClass {    
     public class SecondInnerClass extends A {
                  // defines foo() and bar()
    }
}

Und schließlich sogar noch mehr an anderer Stelle ....

HashMap<Type, A> handlers = new HashMap<Type, A>();
        for (Entry e : HashMapOfStringToEntry.getTypes())
        {       
            if(e.Handler != null) {
                handlers.put(e.Type, (A) e.Handler);
            }
        }

e.Handler kann entweder eine Art von FirstInnerClass oder SecondInnerClass sein. Es ist das Gespräch e.Handler auf (A), das die folgenden Fehler verursacht:

java.lang.ClassCastException: java.lang.Class

Ich habe mit Debugging-Ausgabe bestätigt, dass e.Handler ist in der Tat eine Klasse Art von FirstOuterClass $ FirstInnerClass. Also entweder gibt es Unterschiede in Gießen zwischen C # und Java (möglich) oder ich bin nicht die richtige Syntax irgendwo bieten (auch möglich).

(Es tut mir leid für die nicht den ganzen Code einfügen, wie das, was die HashMaps sind. Ich will nicht das wirkliche Problem verwirren. Im Grunde ist es eine Zuordnung zwischen einem String-Schlüssel und ein paar Klassen, die abstrakte erweitern A).

War es hilfreich?

Lösung

Wenn einer Ihrer inneren Klassen wurde gegossen, um A versagt, dann Ausnahme aussehen würde:

  

java.lang.ClassCastException: FirstOuterClass $ FirstInnerClass kann nicht auf A gegossen werden

Stattdessen Sie bekommen diese:

  

java.lang.ClassCastException: java.lang.Class

Schneiden Sie weg am Ende dieses „nicht zu gieße A werden“?

Unabhängig davon, scheint es, dass e.Handler vom Typ java.lang.Class ist. Wie in, FirstOuterClass$FirstInnerClass selbst eher als eine einzige Instanz davon.

Andere Tipps

Von der Ausnahmemeldung, es scheint, dass Sie versuchen, eine Instanz von Class zu werfen, nicht eine Instanz der Klasse repräsentiert es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top