Est-il possible de taper à une classe fonte abstraite parent?
-
29-09-2019 - |
Question
Je suis en train de porter un projet C # en Java. J'ai un morceau de code qui ressemble à ceci:
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, 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 un type de FirstInnerClass ou SecondInnerClass. Il est cette conversation e.Handler (A) qui provoque l'erreur suivante:
java.lang.ClassCastException: java.lang.Class
Je l'ai vérifié avec le débogage sortie qui e.Handler est en effet un type de classe de FirstOuterClass $ FirstInnerClass. Donc, soit il y a des différences dans la coulée entre C # et Java (possible) ou je ne suis pas quelque part fournir à la droite de la syntaxe (possible).
(Je suis désolé de ne pas coller tout le code, comme ce que les HashMaps sont pour. Je ne veux pas embrouiller la vraie question. Fondamentalement, il est une correspondance entre une clé de chaîne et deux classes qui étendent abstraite A).
La solution
Si l'un de vos classes internes périclite de caster A
, votre exception ressemblerait à ceci:
java.lang.ClassCastException: FirstOuterClass $ FirstInnerClass ne peut pas être jeté à A
, vous lieu d'obtenir ceci:
java.lang.ClassCastException: java.lang.Class
Êtes-vous interrompez « ne peut pas être jeté à A » à la fin de cette situation?
Quelle que soit, il semble que e.Handler
est de type java.lang.Class
. Comme dans, se FirstOuterClass$FirstInnerClass
plutôt qu'une seule instance.
Autres conseils
Dans le message d'exception, il semble que vous essayez de lancer une instance de Class
, pas une instance de la classe qu'il représente.