Pregunta

Estoy en el proceso de portar un proyecto de C # en Java. Tengo un trozo de código que es similar al siguiente:

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

Y luego, en otro lugar ...

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

Además en otro lugar ...

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

Y, por último, incluso más en otro lugar ....

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 puede ser o bien un tipo de FirstInnerClass o SecondInnerClass. Es esa conversación e.Handler a (A) que está causando el error siguiente:

java.lang.ClassCastException: java.lang.Class

He verificado con la salida de depuración que e.Handler es de hecho un tipo de clase de FirstOuterClass $ FirstInnerClass. Así que, o hay diferencias en la fundición entre C # y Java (posible) o yo no estoy proporcionando la sintaxis correcta en algún lugar (también posible).

(Lo siento por no pegar todo el código, al igual que lo son los HashMaps para. No quiero ir tirando hasta el verdadero problema. Básicamente se trata de una correspondencia entre una tecla de cuerda y un par de clases que se extienden abstracta A.)

¿Fue útil?

Solución

Si una de sus clases internas estaba fallando en yeso para A, entonces su excepción se vería así:

  

java.lang.ClassCastException: FirstOuterClass $ FirstInnerClass no se puede convertir a A

En lugar de ello, está obteniendo la siguiente:

  

java.lang.ClassCastException: java.lang.Class

¿Está cortando "no puede ser echado a A" al final de esta?

En cualquier caso, parece que e.Handler es de tipo java.lang.Class. Al igual que en, FirstOuterClass$FirstInnerClass sí mismo en lugar de una única instancia de la misma.

Otros consejos

Desde el mensaje de excepción, parece que usted está tratando de echar una instancia de Class, no una instancia de la clase que representa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top