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