Descobrir se uma classe é uma classe anônima

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

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.

[quote=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.
[/quote]

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

Class.isAnonymousClass (a partir do Java 5)

: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

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)

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

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).

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

[]s