Reflection  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Olá pessoal!

Eu sei acessar por reflection declarações da minha classe (métodos, variáveis, etc...)

Mas tenho um caso aqui em que quero acessar variáveis que estão dentro de um método. Ai dá erro dizendo que não encontrou a variável. Vejam o erro:



Tudo acontece dentro do meu método geracaoDemonstrativoLucroPrejuizo(), as variáveis estão declaradas ai dentro e eu tb estou executando o comando reflection ai dentro.

Estou tentando assim:


Não funciona, dá o erro que eu já falei.
Então tentei especificar o método em que eu estou, tentei da seguinte forma:


Tb não funciona, continua dando o mesmo erro.

Antes que perguntem, sim, essa variável existe e está acessível nesse momento, já conferi isso.

Alguém sabe como faço pra que ele procure a declaração da variável dentro do meu método?


Grata,
Renata

[]'s, Renata
[Email]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline


Mas tenho um caso aqui em que quero acessar variáveis que estão dentro de um método.


Uma variável local não pode ser obtida ou acessada via reflection, até porque ela pode ser "optimized out" (ou seja, removida ou transformada devido à otimização).
É uma variável local mesmo que você está tentando obter?
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Sim, é uma variável local.

Certeza de que não pode?!

[]'s, Renata
[Email]
cristian_clever
JavaTeenager
[Avatar]

Membro desde: 16/09/2009 14:43:45
Mensagens: 163
Offline

"Alguma forma" com certeza existe! Afinal qdo fazemos o debug da aplicação, é possível ler/alterar variaveis dentro de um método... correto?
Mas tbm desconheço esse recurso seja na reflection ou GCLib... com certeza isso demanda uma boa pesquisa!

Cabe a vc verificar a viabilidade disso...

[]s

This message was edited 1 time. Last update was at 16/10/2009 13:03:43


Cristian Clever
http://alemdocafe.wordpress.com
[WWW] [MSN]
zoren
GUJ Master
[Avatar]

Membro desde: 30/06/2008 08:32:33
Mensagens: 1007
Offline

o Debug é feito através da pilha de chamadas

se houver algum jeito de pegar variaveis dentro de um método, eu desconheço
[Email] [MSN]
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline

Reflection só tem acesso a váriaveis declaradas como public.

Para ter acesso a valores use os métodos convencionais get e set.




um exemplo de bandeja:


This message was edited 1 time. Last update was at 16/10/2009 13:10:04


Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi




<UnTouChAbLe>
[Email] [WWW] [MSN]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Infelizmente o exemplo "de bandeja" não me ajuda..rs..

As variáveis estão declaradas dentro do método, não dentro de uma classe. É um caso de variável local msm, parece que não vai dar.

Bom, farei de outra forma aqui,,, vlw ai pela ajuda, fiquei na curiosidade de entender pq meu Reflection não estava funcionando, agora sei.

Grata,
Renata

[]'s, Renata
[Email]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Infelizmente, variáveis locais e parâmetros não podem ser acessados corretamente via reflection.

Quanto às primeiras eu digo que é realmente complicado obter a variável correta "por nome", já que escopos são difíceis de especificar corretamente, e envolveriam a colaboração do compilador.

Quanto aos segundos, eu acho que é uma falha da API de reflection.

Haviam prometido que iriam incluir parâmetros no reflection (por exemplo, listar os nomes dos parâmetros de um método via reflection), mas por enquanto você só consegue saber os tipos de cada parâmetro de um método, mas não seus nomes. Isso provavelmente não será mudado no Java 7, conforme você pode ver em: http://download.java.net/jdk7/docs/api/java/lang/reflect/Method.html

Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Voce pode acessar campos com qualquer declaração de privacidade mas apenas as variaveis globais.

Voce pode ter o acesso aos métodos com o Javaassist, mas não é algo simples.

Se divirta XD

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline

Renata (desculpe a curiosidade) mas eu não vejo uma situação em que é preciso usar reflections dentro de um método com uma varíavel de método... :/

Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi




<UnTouChAbLe>
[Email] [WWW] [MSN]
gomesrod
GUJ Ranger
[Avatar]

Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline

Giulliano wrote:Renata (desculpe a curiosidade) mas eu não vejo uma situação em que é preciso usar reflections dentro de um método com uma varíavel de método... :/
Leu meu pensamento :D
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Acho que ela quer criar uma rotina que pode listar ou modificar uma variável local ou de instância, passando apenas o nome. Só que isso é um pouco inviável no caso de uma variável local, até por causa dos problemas de escopo.
lbvitoriano
JavaTeenager

Membro desde: 10/04/2006 14:22:54
Mensagens: 156
Offline

gomesrod wrote:
Giulliano wrote:Renata (desculpe a curiosidade) mas eu não vejo uma situação em que é preciso usar reflections dentro de um método com uma varíavel de método... :/
Leu meu pensamento :D


Então eu acho q na nossa área, sempre podemos nos surpreender a cada dia devido ao dinamismo dela, é isto que torna o desenvolvimento interessante.

Vou pesquisar algo pra vc e já posto..
Abraços.
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3927
Offline

Não é possível recuperar as variáveis em um método, por causa do escopo delas. O tempo de vida é muito curto, e provavelmente, esse erro que você apresentou, ocorre devido ao fato de que essas variáveis não existem mais.

www.citrox.com.br
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

gomesrod wrote:
Giulliano wrote:Renata (desculpe a curiosidade) mas eu não vejo uma situação em que é preciso usar reflections dentro de um método com uma varíavel de método... :/
Leu meu pensamento :D


Mais simples do que imaginam....

Tenho uma situação idiota aqui, que ocorre dentro de um método, em que o nome de algumas variáveis são bem parecidos, suponhamos por ex que seja assim: valor1, valor2, valor3,... valor5 e cod1, cod2,... cod6

O processamento que tenho que fazer para elas será sempre o mesmo, então eu fiz um for básico, de 1 a 6 (seguindo meu exemplo acima de nomes de variáveis), onde eu fazia o mesmo processamento pra todas as vars. Porém fui desbancada pelo fato da Reflection não pegar variáveis.

Eu já faço isso em outros casos, casos em que por ex, na tela tenho caixas de texto com nomes parecidos, etc... mas ai são variáveis públicas.

Bom, satisfeita a curiosidade do povo. :wink:



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