Declaração do problema:
O Java Reflection pode ser utilizado para recuperar os nomes de variáveis declaradas localmente? Dado um trecho de código como:
Foo b = new Foo(); Foo a = new Foo(); Foo r = new Foo();
Podemos desenvolver um método que identifique os nomes das variáveis, como:
public void baz(Foo... foos) { for (Foo foo : foos) { // Print the name of each foo - b, a, and r System.out.println(***); // Placeholder for variable name access } }
Solução:
Até o Java 8, não era possível recuperar nomes de variáveis locais por meio de reflexão. No entanto, o suporte parcial foi introduzido nessa versão. Os nomes dos parâmetros, um tipo especializado de variáveis locais, tornaram-se acessíveis através da reflexão. Isso se mostrou útil na substituição de anotações como @ParameterName, comumente empregadas por estruturas de injeção de dependência.
Para obter informações mais abrangentes sobre nomes de variáveis locais, examinar arquivos de classe pode oferecer alguns insights. Durante a compilação, as técnicas de otimização às vezes eliminam esses dados para economizar espaço. No entanto, se existir, o atributo da tabela de variáveis locais de um método lista os tipos e nomes das variáveis dentro de seus respectivos escopos de instrução.
Ferramentas de engenharia de bytecode, como ASM, podem fornecer mecanismos para inspecionar essas informações em tempo de execução. Dada a aplicação de nicho desta capacidade principalmente em ambientes de desenvolvimento, tais bibliotecas oferecem capacidades complementares além da mera extração de nomes de variáveis.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3