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).

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top