A seguinte função em Java destina-se a receber uma lista como parâmetro, bem como inserir elementos de instâncias da classe Produto. 1. public static int f1(ArrayList lista){ 2. for (int i = 0; i < 10; i++) { 3. Produto P = Produto(); 4. lista.add(P); 5. } 6. return lista.size(); 7. } Após analisar o trecho de código-fonte, assinale a afirmativa correta.
- A)A função f1 está sintaticamente correta e sempre retornará o valor 10 como resultado.
Errada, porque a função não está sintaticamente correta e, além disso, o retorno não seria necessariamente 10 se a lista já tivesse elementos.
- B)Há um erro sintático na linha 3, visto que o operador new não está sendo utilizado para instanciar o objeto da classe Produto.
Certa, pois a linha 3 deveria usar new para instanciar o objeto Produto, como em Produto P = new Produto();.
- C)A função f1 está correta em termos de sintaxe e semântica; o resultado da função pode variar de acordo com o parâmetro de entrada.
Errada, porque há erro sintático na criação do objeto e a função não está correta nem em sintaxe nem em semântica.
- D)Há um erro sintático na linha 1, pois a função não poderia ser estática, e um erro semântico na linha 6, devido à incompatibilidade de tipos.
Errada, porque um método pode ser static sem problema e o tipo de retorno int é compatível com lista.size().
Gabarito: B
Em Java, para criar um objeto, a forma clássica é usar o operador new junto com o construtor da classe. Então, se a intenção era instanciar um Produto, a linha deveria seguir algo como Produto P = new Produto();. Sem o new, o código não faz a criação do objeto e a linha fica sintaticamente incorreta. Esse detalhe é bem cobrado em prova porque a banca gosta de testar se voce confunde declaração de referência com instanciação real. No trecho apresentado, a função percorre um laço de 0 a 9 e tenta inserir 10 elementos na lista. A ideia geral está clara, mas a execução trava justamente na criação do objeto, porque Produto P = Produto(); não é uma sintaxe válida em Java. Falta o operador new, que é indispensável para instanciar a classe, salvo situações muito específicas como métodos de fábrica, o que não é o caso aqui. Por isso o gabarito é a letra B. A banca apontou corretamente o erro sintático na linha 3. Se a linha estivesse correta, aí sim a função adicionaria 10 produtos e retornaria o tamanho da lista, que poderia até não ser 10 se a lista já viesse preenchida. Mas com o código como está, a falha vem antes da lógica de contagem. Vale lembrar: em Java, assinatura de método static não é problema por si só. Métodos estáticos podem receber listas, manipular objetos e retornar valores normalmente. O problema aqui não é a estática nem o retorno, e sim a ausência do new na criação do objeto.