¿Cómo se obtiene la clase de una clase abstracta (objeto) en JavaME?
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.
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";
}