You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: book/04-lambda/sections/04-method-reference.asc
+36-12Lines changed: 36 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,10 +14,14 @@ A sintaxe de referência a um método é uma novidade do Java 8. Com ela é poss
14
14
15
15
* Referências a métodos estáticos -> `String::valueOf`
16
16
* Referências a métodos de um objeto -> `instanciaDeString::isEmpty`
17
-
* Referências a métodos de um tipo de objeto -> `String::isEmpty`
17
+
* Referências a métodos de um tipo de objeto (de uma classe, interface, etc) -> `String::isEmpty`
18
18
* Referências a construtores -> `String::new`
19
19
20
-
A seguir serão apresentadas as ocasiões em que cada uma dessas referências é útil.
20
+
É essencial lembrar das Interfaces Funcionais, das variações de sintaxe de Expressões Lambda e das definições de Interfaces Funcionais Pré-Construídas. Caso julgue necessário, reveja as seções deste capítulo.
21
+
22
+
É possível pensar nas referências a métodos como uma outra forma de escrever uma expressão lambda, caso a única coisa que sua expressão lambda faça seja chamar um outro método.
23
+
24
+
A seguir serão apresentadas as ocasiões em que são utilizadas as referências a métodos.
21
25
22
26
. Chamadas a métodos estáticos em expressões lambda podem virar uma referência ao método.
Essa utilização de _method reference_ só é possível porque:
41
+
Nesse caso a única coisa que a expressão lambda faz é receber um argumento `x` e repassar para o método `valueOf` de `String`. Para simplificar isso, o Java 8 permite que você escreva essa mesma função lambda como foi apresentado na linha seguinte: `String::valueOf`.
38
42
+
39
-
* A implementação de `String.valueOf(int)` satisfaz a interface funcional `Function` (recebe um argumento e retorna um valor).
43
+
Só é possível representar a primeira expressão lambda na forma de um _method reference_ porque:
44
+
+
45
+
* A implementação de `String.valueOf` satisfaz a interface funcional `Function` (recebe um argumento e retorna um valor).
40
46
* O argumento de entrada da expressão lambda `x` é exatamente o mesmo passado para o método `String.valueOf(x)`.
41
-
* Essa é a única chamada que essa expressão lambda faz.
47
+
* A expressão lambda é simples: somente possui uma chamada a um método.
42
48
43
-
. Chamadas a métodos de uma instância também podem ser representados como uma referência a um método.
49
+
. Chamadas a métodos de uma instância específica também podem ser representados como uma referência a um método.
Nesse exemplo, a referência está sendo feita ao método `doubleValue` do *tipo* `Integer`. Essa utilização de _method reference_ só é possível porque:
85
+
Nesse exemplo, a referência está sendo feita ao método `doubleValue` do *tipo* `Integer`. Só é possível representar a primeira expressão lambda na forma de um _method reference_ porque:
80
86
+
81
-
* Nossa expressão lambda satisfaz a interface funcional `Function` (recebe um argumento e retorna um valor).
87
+
* Nossa expressão lambda satisfaz a interface funcional `Function` (recebe um argumento `x` e retorna um valor `double`).
82
88
* A expressão lambda recebe um argumento `x` do tipo `Integer`, que possui o método `doubleValue` que não recebe parâmetros.
83
-
* Essa é a única chamada que essa expressão lambda faz.
89
+
* A expressão lambda é simples: somente possui uma chamada a um método.
84
90
85
91
. Também é possível utilizar a referência ao método de um tipo, como no exemplo anterior, mesmo que o método receba parâmetros.
Como nesse caso temos uma outra `String` `+ "2"` sendo acrescentada no construtor, não há como representar isso com uma simples referência ao construtor.
128
134
135
+
. É possível utilizar _method reference_ também com suas própria classes. Veja no exemplo a seguir os tipos criados pelo nosso código e as expressões lambda equivalentes com e sem referência a métodos.
Você já viu todas as formas de criar uma expressão lambda, desde a mais completa até a mais simples. Tenha certeza que conhece todas essas variações para o exame de certificação.
0 commit comments