Durante o desenvolvimento de um framework surgiu a necessida...

Próximas questões
Com base no mesmo assunto
Q4071636 Programação
Durante o desenvolvimento de um framework surgiu a necessidade de invocar dinamicamente um método a partir de uma string que contém o nome e a classe do método. Um dos programadores com mais experiência sugeriu o uso do conceito de reflexão computacional. O framework em questão foi desenvolvido na linguagem Java, versão 25.

Assinale a alternativa CORRETA.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: C

Fundamento decisivo: O enunciado exige invocação dinâmica de um método a partir de nomes em string; a decisão depende de saber que Java possui reflection nativa e que esse recurso resolve esse tipo de acesso em tempo de execução.

Tema central: Reflexão em Java
Análise das alternativas
A
Errada
Está errada porque afirma que Java não implementa reflexão nativamente, mas a plataforma possui API oficial de reflection. Também desloca a solução para manipulação direta de bytecode e para biblioteca externa, o que não é necessário para o caso apresentado.
B
Errada
Está errada porque reconhece a existência da reflexão em Java, mas nega exatamente uma de suas aplicações típicas: obter um Method e invocá-lo dinamicamente. Isso contraria o critério decisivo da questão.
C
Certa
A alternativa C está certa porque aponta a API oficial de reflexão da plataforma Java, centrada no pacote java.lang.reflect e no uso de Class, que permite acesso programático aos métodos de classes carregadas. Esse é justamente o mecanismo adequado para localizar um método a partir de identificadores e realizar sua invocação dinâmica em tempo de execução.
D
Errada
Está errada porque nega a própria possibilidade de reflexão em Java, embora a plataforma possua reflection nativa que permite localizar e invocar métodos dinamicamente.
Pegadinha da questão
A confusão explorada foi tratar invocação dinâmica por nome como algo que exigiria bytecode ou seria impossível em Java, quando isso é precisamente um uso clássico da reflection nativa.
Dica para questões semelhantes
  • Se o problema envolve descobrir classe, método ou membro em tempo de execução por identificadores como nome, verifique primeiro a API de reflection da linguagem.
  • Em Java, confirme a existência da solução nativa pela combinação de Class com java.lang.reflect antes de aceitar necessidade de bytecode ou biblioteca externa.
  • Quando uma alternativa negar uso de reflection para invocação dinâmica de método, confronte com o critério técnico: obtenção de Method por nome e invocação dinâmica.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

A alternativa CORRETA é a C: A linguagem Java implementa o conceito de reflexão computacional por meio do pacote import java.lang.reflect. e o problema do enunciado pode ser resolvido a partir desse conceito.*

Justificativa:

* C está CORRETA: O Java possui suporte nativo à reflexão computacional (Reflection API) através do pacote java.lang.reflect (junto com a classe java.lang.Class). Ela permite inspecionar e invocar dinamicamente classes, métodos, atributos e construtores em tempo de execução usando seus nomes em formato de string (por exemplo, utilizando Class.forName(), getMethod() e invoke()).

* A está incorreta: O Java suporta reflexão nativamente desde suas primeiras versões, não sendo necessário manipular bytecode nem depender de bibliotecas externas para isso.

* B está incorreta: O conceito de reflexão serve exatamente para resolver problemas como o descrito no enunciado (invocar métodos dinamicamente a partir do nome).

* D está incorreta: A reflexão é plenamente compatível com máquinas virtuais e é um dos pilares de ecossistemas Java (usada extensivamente por frameworks como Spring, Hibernate e JUnit).

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo