Pular para o conteúdo principal

Questão de Arquitetura de Software — Software — FCC 2023

Arquitetura de SoftwareSoftware
Código
fc070435
Banca
FCC
Órgão
TRT - 21ª Região (RN)
Ano
2023
Nível
Superior
Cargo
Analista Judiciário - Área: Apoio Especializado - Tecnologia da Informação

Em uma aplicação Java web que utiliza JPA, em condições ideais, considere o método genérico abaixo em uma classe chamada


EmpresaDao. java.

public <T> List listar (String queryNomeada, Class<T> classe) {

      conectar () ;
      try {
     return manager. createNamedQuery (queryNomeada, classe) .getResultList() ;
      } catch (NoResultException erro) {
     return null;
      }
}


Sabendo que existe uma classe de entidade do banco de dados chamada Departamento, e uma query nomeada chamada Departamento. findAll que seleciona todos os departamentos cadastrados, a partir de uma servlet Java da aplicação, para chamar o método listar e obter os departamentos cadastrados utiliza-se o comando

  1. AList<Departamento> departamentos = new EmpresaDao () . listar ("Departamento.findAll", Departamento) ;
  2. BList<Departamento> departamentos = new EmpresaDao() . listar ("Departamento.findall", new Class (Departamento.java));
  3. CList<Departamento> departamentos = new EmpresaDao() . listar ("Departamento.findAll", Departamento.class) ;
  4. DList<T> departamentos = new EmpresaDao() . listar ("Departamento.findAll", Departamento.class) ;
  5. EList<Departamento> departamentos = new EmpresaDao ( ) . listar ("Departamento.findAll", Departamento.java);
Revelar gabarito e comentário

GabaritoC — List<Departamento> departamentos = new EmpresaDao() . listar ("Departamento.findAll", Departamento.class) ;

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”.

Java JPA: Chamada de Named Query com Genéricos

Gabarito: letra C. A única alternativa que utiliza a sintaxe correta para passar o tipo da classe (Departamento.class) e o nome exato da query ("Departamento.findAll") é a letra C. O método listar espera um segundo argumento do tipo Class<T>, que em Java é representado pelo literal Classe.class.

Alternativa A — ❌ Incorreta

Erro: usa Departamento sem o sufixo .class. Em Java, para obter o objeto Class de uma classe, é obrigatório usar Departamento.class. Passar apenas o nome da classe sem .class não é uma expressão válida e causará erro de compilação.

Alternativa B — ❌ Incorreta

Erro: emprega "Departamento.findall" com 'l' minúsculo – o nome da query difere do definido (findAll com 'L' maiúsculo), resultando em falha em tempo de execução. Além disso, new Class(Departamento.java) não é sintaxe Java válida; não se instancia Class com o nome do arquivo .java. A forma correta é Departamento.class.

Alternativa C — ✅ Correta ⟵ GABARITO

Utiliza "Departamento.findAll" (nome exato da query) e Departamento.class (literal de classe) – ambos perfeitamente de acordo com a assinatura do método: public <T> List<T> listar(String queryNomeada, Class<T> classe). A chamada compila e executa corretamente.

Alternativa D — ❌ Incorreta

Erro: a variável é declarada como List<T> em vez de List<Departamento>. O tipo T é um parâmetro genérico do método, não um tipo concreto. Para atribuir o retorno, a variável deve ser List<Departamento>, pois o método é chamado com T = Departamento.

Alternativa E — ❌ Incorreta

Erro: usa Departamento.java como argumento. Departamento.java é o nome do arquivo-fonte, não um literal de classe. O compilador espera um objeto Class, que é obtido com Departamento.class.

Gabarito: letra C.

Link permanente: /questoes/fc070435