2
respostas

Lambda

Não consigo identificar o motivo dos códigos abaixo serem validos ou não

interface Calculator{ T function(T a, T b); } Calculator multiply = (Integer a,Integer b) -> (int) a * b

Calculator subtract = (a,b) -> {return a - b;}

Calculator divide = (int a, int b) -> {return (Integer) a / b;}

Calculator sum = (a,b) -> a + b

2 respostas

Lembre que no caso sua interface é generica, ou seja, se você declarar que Calculator é do tipo Integer como abaixo:

Calculator divide = (int a, int b) -> {return (Integer) a / b;}

Os parametros devem ser do tipo Integer, no caso acima os parametros são do tipo int (primitivo). Por isso esse não é um lambda valido.

Nas demais opções se você declara Calculator como o lambda irá inferir o valor nos parametros como Integer.

Ex.: Para :Calculator sum = (a,b) -> a + b;

O lambda entede isso :

Calculator sum = (Integer a, Integer b) -> a + b;

Espero ter ajudado

Desculpe esqueci de tirar a formatação e o editor de texto aqui do alura entendeu que <Integer> era uma tag HTML, segue o texto escrito de forma certa.

Lembre que no caso sua interface é generica, ou seja, se você declarar que Calculator é do tipo Integer como abaixo:

Calculator<Integer> divide = (int a, int b) -> {return (Integer) a / b;}

Os parametros devem ser do tipo Integer, no caso acima os parametros são do tipo int (primitivo). Por isso esse não é um lambda valido.

Nas demais opções se você declarar como Calculator<Integer> o lambda irá inferir o valor nos parametros como Integer.

Ex.:

Para :

Calculator sum = (a,b) -> a + b;

O lambda vai enteder isso :

Calculator sum = (Integer a, Integer b) -> a + b;

Espero ter ajudado.