Descobrir se uma classe é uma classe anônima

8 respostas
eberson_oliveira

Bom dia a todos

Gostaria de saber se é possível descobrir se um objeto foi gerado a partir de uma classe anônima e, caso seja uma instância de uma classe anônima, descobrir em que classe essa classe anônima foi declarada.

Eu estou montando uma estrutura de classes e quero evitar que sejam criadas inner classes e classes anônimas nessa estrutura. Para descobrir se é uma inner class eu usei o método getDeclaringClass() da classe (não sei se é a melhor forma… se não for me corrijam, por favor…), mas ainda não descobri como identificar o objeto se refere a uma classe anônima.

Alguma ajuda?

Grato pela atenção

Éberson

8 Respostas

E

Uma classe anônima normalmente tem um nome como “components.ToolBarDemo$23”, ou seja, o nome da classe tem um cifrão e um número. Embora você possa criar um programa com uma classe com esse nome (que não é inválido em Java, se você for ver), normalmente você nem se lembra que nomes com cifrões são legítimos em Java e não cria classes com esses nomes.

eberson_oliveira

Edson Watanabe:
Uma classe anônima normalmente tem um nome como “components.ToolBarDemo$23”, ou seja, o nome da classe tem um cifrão e um número. Embora você possa criar um programa com uma classe com esse nome (que não é inválido em Java, se você for ver), normalmente você nem se lembra que nomes com cifrões são legítimos em Java e não cria classes com esses nomes.

Bom dia Edson, obrigado pela resposta.

Eu tinha pensado em testar o nome da classe, mas pensei que não seria uma boa estratégia e nem muito segura por causa dos nomes que poderiam ser usados na classe.

Será que não existe nenhuma forma de saber do java se a objeto se refere a uma classe anônima com certeza?

[]s

E

Class.isAnonymousClass (a partir do Java 5)

eberson_oliveira

:cry:

Desculpe, esqueci de mencionar… mas preciso de algo que possa ser usado no java 4 ? (não me crucifiquem, por favor… ainda estamos migrando para o java 6…)

[]s

wandersonxs

Mais um motivo para migrar para uma versão mais atual.
Convensa seu chefe a contratar mais pessoas para a migração ser mais rápida. :twisted: :twisted:

Abraços
Wanderson 8)

eberson_oliveira

Queria aproveitar o post e tirar outra dúvida…
Eu tenho um método estático e gostaria de descobrir quem o invocou. É possível?

Grato,
Éberson

E

a) Passe o objeto .class da classe que chamou o método como parâmetro (maneira mais rápida, mas um pouco incompleta).

b) Crie um java.lang.Throwable, chame seu método fillInStackTrace, e use o método getStackTrace para obter as informações desejadas. (Isso é feito pelo log4j, por exemplo).

eberson_oliveira

Muito obrigado Edson… usei a opção b e funcionou da forma que eu esperava…

[]s

Criado 27 de agosto de 2009
Ultima resposta 27 de ago. de 2009
Respostas 8
Participantes 3