Pergunta

Eu preciso obter a classe de um objeto em tempo de execução.

Para uma aula não abstrutada, eu poderia fazer algo como:

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

Mas para uma classe abstrata, isso não funciona (sempre me dá Object)

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

Este código estará sendo executado em ambientes javame.

Foi útil?

Solução

Você só precisa

MyAbstract.class

Essa expressão retorna o objeto de classe que representa Myabstract.

Outras dicas

O código que você deseja no caso abstrato é:

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

Embora eu pessoalmente não me incomodasse em definir a constante e apenas usasse o Myabstract.class por toda parte.

Eu esperaria que o código que você escreveu retornasse a classe 'classe', não a classe 'objeto'.

Eu acho que mais informações são necessárias aqui. Em Java, uma classe abstrata não pode ser instanciada. Isso significa que um objeto em tempo de execução não pode ter sua classe abstrata. Seria uma subclasse que implementa todos os métodos abstratos. Em javame, Object.getClass() deve ser tudo que você precisa. Você está tentando reconstituir sua hierarquia de classe em tempo de execução?

Nesse caso, você pode implementar algo assim:

public String getClassHierarchy() {
    return super.getClassHierarchy() + ".MyAbstract";
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top