Je suis en train de transférer un projet C# en Java. J'ai un morceau de code qui ressemble à ceci:Est-il possible de taper cast dans une classe abstraite parent?
public abstract class A
{
public abstract void foo() throws Exception;
public abstract void bar();
}
Et puis, d'ailleurs ...
public class FirstOuterClass {
public class FirstInnerClass extends A {
// defines foo() and bar()
}
}
De plus ailleurs ...
public class SecondOuterClass {
public class SecondInnerClass extends A {
// defines foo() and bar()
}
}
Et enfin, même PLUS ailleurs ...
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 peut être e Ither un type de FirstInnerClass ou SecondInnerClass. Il est cette conversation e.Handler (A) qui provoque l'erreur suivante:
java.lang.ClassCastException: java.lang.Class
J'ai vérifié avec le débogage sortie qui e.Handler est en effet un type de classe de FirstOuterClass $ FirstInnerClass. Donc, soit il existe des différences dans la coulée entre C# & Java (possible) ou je ne fournis pas la bonne syntaxe quelque part (aussi possible).
(Je suis désolé de ne pas coller tout le code, comme pour les HashMaps.) Je ne veux pas embrouiller le vrai problème, mais c'est un mappage entre une clé String et quelques classes abstract A.)
Cela semble bien, mais pourquoi le type statique d'e.Handler n'est pas A donc vous évitez la distribution, et obtenez le problème à sa source? –
Pouvez-vous fournir plus de données sur HashMapOfStringToEntry? votre boucle foreach est confuse. La carte renvoie l'entrée et vous utilisez autre chose. Il semble que cela renvoie une implémentation locale d'Entrée qui peut aider ici. –
Bivas