E 'possibile digitare getto ad una classe astratta genitore?
-
29-09-2019 - |
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).
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.