Pular para o conteúdo principal

Questão de Programação — Plataforma Java — FGV 2025

ProgramaçãoPlataforma Java
Código
fg121246
Banca
FGV
Órgão
TCE-PE
Ano
2025
Nível
Superior
Cargo
Analista de Controle Externo - Tecnologia da Informação
O trecho de código a seguir representa um exemplo de emprego de anotações em Java:Imagem associada para resolução da questãoSobre desenvolvimento de códigos em JavaScript, considere o exemplo dado e analise as afirmativas a seguir.I. Anotações podem ser usadas pelo compilador para detectar erros ou suprimir avisos.II. Ferramentas podem processar informações de anotações para gerar código e arquivos XML.III. Algumas anotações estão disponíveis para serem examinadas em tempo de execução.Está correto o que se afirma em:
  1. AI, apenas.
  2. BI e II, apenas.
  3. CI e III, apenas.
  4. DII e III, apenas.
  5. EI, II e III.
Revelar gabarito e comentário

GabaritoE — I, II e III.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Anotações em Java

Gabarito: letra E. As três afirmativas estão corretas: anotações em Java podem ser usadas pelo compilador para detectar erros ou suprimir avisos (I), ferramentas podem processá-las para gerar código e arquivos XML (II), e algumas anotações estão disponíveis para exame em tempo de execução (III). Esse é o papel central das anotações na plataforma Java, que as utiliza amplamente para configuração e metadados.

Anotações (ou annotations) são uma forma de metadados introduzida no Java 5, que permitem adicionar informações ao código-fonte sem alterar sua lógica. Elas são declaradas com o prefixo @ (como @Override, @Deprecated, @SuppressWarnings) e podem ser aplicadas a classes, métodos, campos, parâmetros e até mesmo a outras anotações. O grande valor das anotações está na sua versatilidade: elas podem ser processadas em diferentes momentos e por diferentes agentes, o que as torna uma ferramenta poderosa tanto para o compilador quanto para frameworks e ferramentas de desenvolvimento.

A afirmativa I está correta porque o compilador Java usa anotações para verificar o código e emitir avisos ou erros. Por exemplo, @Override faz o compilador verificar se o método realmente sobrescreve um método da superclasse, gerando erro caso contrário. Já @SuppressWarnings instrui o compilador a suprimir avisos específicos, como os de uso de código obsoleto. A afirmativa II também está correta: ferramentas como o JAXB (Java Architecture for XML Binding) e o Hibernate processam anotações em tempo de compilação ou de execução para gerar código, mapeamentos ou arquivos XML. Por fim, a afirmativa III é verdadeira porque anotações com retenção RUNTIME podem ser lidas via reflexão em tempo de execução, permitindo que frameworks como o Spring e o JUnit interpretem as anotações para configurar o comportamento da aplicação.

A pegadinha desta questão está na confusão entre Java e JavaScript. O enunciado menciona "desenvolvimento de códigos em JavaScript", mas o exemplo e as afirmativas tratam claramente de anotações da plataforma Java. JavaScript não possui anotações no sentido do Java — ele usa decorators (uma proposta experimental) ou simplesmente funções. A banca explora exatamente essa troca de nomes para induzir o candidato ao erro. Portanto, o que decide a questão é reconhecer que o tema é Java e que as três afirmativas descrevem corretamente os usos das anotações nessa linguagem.

Anotações em Java
  • 1O que são
    • Metadados (prefixo @)
    • Não alteram a lógica
    • Aplicáveis a classes, métodos, campos
  • 2Usos
    • Compilador detecta erros/suprime avisos
      • @Override, @SuppressWarnings
    • Ferramentas geram código/XML (Hibernate, JAXB)
    • Exame em tempo de execução via reflexão (Spring, JUnit)
  • 3Retenção
    • RUNTIME → reflexão
    • (demais políticas)
LEVEL · soulevel.com.br

Item I — ✅ Correto

As anotações podem ser usadas pelo compilador para detectar erros ou suprimir avisos. Um exemplo clássico é a anotação @Override, que faz o compilador verificar se o método anotado realmente sobrescreve um método da superclasse, gerando um erro de compilação caso contrário. Outro exemplo é @SuppressWarnings, que instrui o compilador a suprimir avisos específicos, como os de uso de código obsoleto ou de operações não verificadas. Essa é uma das finalidades primárias das anotações, conforme a documentação oficial da linguagem.

Item II — ✅ Correto

Ferramentas podem processar informações de anotações para gerar código e arquivos XML. Isso é amplamente utilizado em frameworks como o Hibernate (mapeamento objeto-relacional) e o JAXB (binding de XML). Por exemplo, anotações como @Entity e @Column no Hibernate permitem que a ferramenta gere automaticamente as tabelas no banco de dados, enquanto @XmlRootElement no JAXB permite gerar a estrutura XML correspondente à classe. Esse processamento pode ocorrer em tempo de compilação (via annotation processors) ou em tempo de execução.

Item III — ✅ Correto

Algumas anotações estão disponíveis para serem examinadas em tempo de execução. Isso é controlado pela política de retenção (@Retention): anotações com RetentionPolicy.RUNTIME podem ser lidas via reflexão durante a execução do programa. Frameworks como o Spring e o JUnit dependem disso para interpretar anotações como @Autowired, @RequestMapping ou @Test e configurar o comportamento da aplicação dinamicamente. Essa capacidade é fundamental para o funcionamento de muitos frameworks modernos.

Conclusão: As três afirmativas estão corretas, portanto a alternativa correta é a letra E.

Gabarito: letra E

Link permanente: /questoes/fg121246