Vamos dissecar mais sobre essas novidades no decorrer do tempo, mas por enquanto vamos ver um exemplo do que podemos fazer. Antigamente, para ler um arquivo e imprimir o seu conteúdo linha a linha poderíamos fazer algo assim:
public class LeitorDeArquivo { public static void main(String[] args) { try(Scanner scanner = new Scanner(new FileInputStream("/Users/lucaspolo/teste"))) { while(scanner.hasNext()) { System.out.println(scanner.next()); } } catch (FileNotFoundException ex) { System.err.println("Problemas ao abrir e ler arquivo: " + ex.getMessage()); } }Basicamente estamos dizendo o seguinte enquanto houver um próximo elemento, imprima este próximo elemento. No Java 8 podemos deixar menor ainda este trecho de código, invertendo a maneira como lidamos com este tipo de instrução, agora podemos dizer para os elementos seguintes, faça a seguinte operação, conforme o código abaixo, que possui o mesmo funcionamento:
public class LeitorDeArquivo { public static void main(String[] args) { try(Scanner scanner = new Scanner(new FileInputStream("/Users/lucaspolo/teste"))) { scanner.forEachRemaining(System.out::println); } catch (FileNotFoundException ex) { System.err.println("Problemas ao abrir e ler arquivo: " + ex.getMessage()); } }Repare que estamos passando o método println do objeto out da classe estática System como parâmetro. Perceba que o operador :: é responsável por esse passagem da referência do (a partir do Java 8) objeto println.
O segredo ocorre no tratamento desse parâmetro recebido, ele converte em uma interface e injeta o seu objeto que no caso é uma String. No futuro veremos qual interface é essa e seu funcionamento por dentro.
Nenhum comentário:
Postar um comentário