Domanda

Sono in fase di porting di un progetto C # in Java. Ho un pezzo di codice che assomiglia a questo:

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

E poi, altrove ...

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

Ulteriori altrove ...

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

E, infine, ancora più altrove ....

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 può essere sia un tipo di FirstInnerClass o SecondInnerClass. E 'quella conversazione e.Handler a (A) che causa il seguente errore:

java.lang.ClassCastException: java.lang.Class

Ho verificato con il debug di uscita che e.Handler è davvero un tipo di classe di FirstOuterClass $ FirstInnerClass. Quindi, o ci sono differenze di fusione tra C # e Java (possibile) o non sto fornendo il qualche parte giusta sintassi (anche possibile).

(mi dispiace per non incollare tutto il codice, come quello che i HashMaps servono a questo. Non voglio confondere il vero problema. Fondamentalmente si tratta di una mappatura tra una chiave stringa e un paio di classi che estendono astratto A).

È stato utile?

Soluzione

Se uno dei tuoi classi interne non riusciva a cast A, allora il vostro eccezione sarà simile:

  

java.lang.ClassCastException: FirstOuterClass $ FirstInnerClass non può essere lanciato alla A

Invece, che stai ricevendo in questo modo:

  

java.lang.ClassCastException: java.lang.Class

Stai tagliando "non può essere gettato a A" alla fine di questo?

In ogni caso, sembra che e.Handler è di tipo java.lang.Class. Come in, FirstOuterClass$FirstInnerClass stessa, piuttosto che una singola istanza di esso.

Altri suggerimenti

Dal messaggio di eccezione, sembra che si sta tentando di lanciare un'istanza di Class, non un'istanza della classe che rappresenta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top