Questão nº 36
Questão de Análise de Sistemas · CESGRANRIO BNDES 01/2024 (nº 36)
Um desenvolvedor está trabalhando em um sistema bancário que precisa lidar de forma consistente com diferentes tipos de contas, todas definidas como subclasses da classe ContaGenerica, como ContaCorrente e ContaPoupanca. Para isso, ele decide usar classes genéricas em Java para criar uma classe genérica TrataConta que só trataria subclasses da classe ContaGenerica.
Considerando-se esse contexto, qual das seguintes opções inicia corretamente a definição da classe genérica desejada?
- A`public class TrataConta<T extends ContaBancaria>` (alternativa correta)
- B`public class TrataConta<ContaBancaria>`
- C`public class TrataConta<T super ContaBancaria>`
- D`public class TrataConta {T ContaBancaria}`
- E`public class TrataConta<T implements ContaBancaria>`
Resposta comentada
Gabarito Alternativa A
Conceito-chave: Em Java, extends em genéricos não significa só herança de classe, mas também "é um subtipo de" (incluindo implementação de interface). Para restringir um tipo genérico a uma classe específica ou suas subclasses, usamos T extends ClasseBase.
- (A) Correta:
public class TrataConta<T extends ContaBancaria>— é exatamente a sintaxe correta:Té o tipo genérico, eextends ContaBancariagarante que só podem ser usadas classes que herdam deContaBancaria(comoContaCorrenteeContaPoupanca). - (B) Incorreta:
public class TrataConta<ContaBancaria>— aquiContaBancariaé apenas um nome de parâmetro de tipo (como se fosseT), não uma restrição; qualquer tipo poderia ser usado, quebrando a regra desejada. - (C) Incorreta:
public class TrataConta<T super ContaBancaria>— armadilha clássica:supernão é permitido em declaração de classe genérica (só em curingas? super), e mesmo assim significaria "superclasse de ContaBancaria", o oposto do que se quer. - (D) Incorreta:
public class TrataConta {T ContaBancaria}— sintaxe inválida: falta<T>na declaração da classe eTnão é definido como tipo. - (E) Incorreta:
public class TrataConta<T implements ContaBancaria>— pegadinha da banca: em genéricos, não se usaimplements; mesmo para interfaces, a palavra correta éextends(ex.:T extends Interface).
Fonte: CESGRANRIO BNDES 01/2024 Analista - Análise de Sistemas (Desenvolvimento) (Caderno Prova 3). Reproduzida para fins de estudo.