Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Scanner como parâmetro

Boa tarde. Você passa sempre o Scanner como parâmetro nos métodos. Não poderiar instanciar o Scanner dentro do método ao invés de passar como parâmetro?

Obrigado

Att. Marcos

1 resposta
solução!

Olá Marcos, tudo bem com você?

Você até pode instanciar o Scanner toda vez que um método for utilizá-lo, mas isso faria com que esse comando de instanciar o Scanner se repetisse várias vezes sem necessidade - em outras palavras, estamos usando várias instancias diferentes de Scanner no lugar de uma que já atenderia toda a aplicação.

Uma ideia que você pode experimentar para evitar ter que passar o Scanner como argumento em todos os métodos, é criar um atributo private Scanner scanner na classe RelatoriosService e dentro do método inicial(Scanner scanner), você atribui esse scanner (argumento) que recebemos como parâmetro do SpringDataApplication ao atributo scanner que acabamos de criar:

package br.com.alura.spring.data.service;

// imports

@Service
public class RelatoriosService{

    // outros atributos

    private Scanner scanner; // criando atributo scanner

    // construtor

    public void inicial(Scanner scanner) {

        this.scanner = scanner; // atribuindo o argumento scanner ao atributo scanner

        while (system) {
            // código omitido
        }
    }

    // outros métodos

O motivo para fazermos isso é que agora, como o scanner se tornou um atributo da classe, todos os métodos de RelatoriosService tem acesso à ele. Em outras palavras, pode remover os scanners dos parâmetros dos métodos pois agora todos tem acesso à ele sem precisar passá-lo como argumento.

Não sei se conseguir ser claro na explicação, mas qualquer dúvida é só avisar!

Forte abraço e bons estudos!!