Pregunta

Necesito obtener la clase de un objeto en tiempo de ejecución.

Para una clase no abstracta podría hacer algo como:

public class MyNoneAbstract{
    public static Class MYNONEABSTRACT_CLASS = new MyNoneAbstract().getClass();

Pero para una clase abstracta esto NO funciona (siempre me da Object )

public abstract class MyAbstract{
    public static Class MYABSTRACT_CLASS = MyAbstract.class.getClass();

Este código se ejecutará en entornos JavaME.

¿Fue útil?

Solución

Sólo necesitas

MyAbstract.class

Esa expresión devuelve el objeto Clase que representa a MyAbstract.

Otros consejos

El código que desea en el caso abstracto es:

public abstract class MyAbstract{
    public static Class MYABSTRACT_CLASS = MyAbstract.class;
}

aunque personalmente no me molestaría en definir la constante y solo usé MyAbstract.class en todo.

Habría esperado que el código que escribiste haya devuelto la clase 'Clase', no la clase 'Objeto'.

Creo que se requiere más información aquí. En Java, una clase abstracta no puede ser instanciada. Eso significa que un Objeto en tiempo de ejecución no puede tener su clase abstracta. Tendría que ser una subclase que implemente todos los métodos abstractos. En JavaME, Object.getClass () debería ser todo lo que necesita. ¿Estás tratando de reconstituir tu jerarquía de clases en tiempo de ejecución?

En ese caso, podrías implementar algo como esto en su lugar:

public String getClassHierarchy() {
    return super.getClassHierarchy() + ".MyAbstract";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top