Descobrir se uma classe é uma classe anônima  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

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
[Email] [MSN]
Edson Watanabe
Debugger

Membro desde: 05/07/2007 12:38:12
Mensagens: 58
Localização: SP
Offline

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
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

Edson Watanabe wrote: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

This message was edited 2 times. Last update was at 27/08/2009 11:14:37

[Email] [MSN]
Edson Watanabe
Debugger

Membro desde: 05/07/2007 12:38:12
Mensagens: 58
Localização: SP
Offline

Class.isAnonymousClass (a partir do Java 5)

This message was edited 1 time. Last update was at 27/08/2009 11:18:34

eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline



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
[Email] [MSN]
wandersonxs
JavaEvangelist
[Avatar]

Membro desde: 24/04/2004 00:58:05
Mensagens: 492
Localização: São Paulo/SP
Offline

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.

Abraços
Wanderson

Assina o q????


[Email] [MSN]
eberson_oliveira
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

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
[Email] [MSN]
Edson Watanabe
Debugger

Membro desde: 05/07/2007 12:38:12
Mensagens: 58
Localização: SP
Offline

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
JavaGuru
[Avatar]

Membro desde: 16/01/2008 10:18:17
Mensagens: 206
Localização: Matão - SP
Offline

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

[]s
[Email] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team