Definição de Interface Funcional
Contém apenas um método abstrato.
Pode ter métodos padrão e/ou static.
Método abstrato não especifica implementação.
interface MyValue {
double getValue();
}
Lembrete: Em interfaces funcionais, o modificador abstract não é necessário explicitamente, pois o Java assume que qualquer método que não tenha implementação em uma interface é automaticamente abstrato.
Atribuindo uma Lambda a uma Interface Funcional
MyValue myVal = () -> 98.6;
O tipo de retorno e os parâmetros da lambda devem ser compatíveis com o método abstrato.
Chamada do método abstrato:
System.out.println("A constant value: " + myVal.getValue());
Resultado: 98.6.
Interfaces Funcionais com Parâmetros
interface MyParamValue {
double getValue(double v);
}
Lambda com cálculo do recíproco:
MyParamValue myPval = (n) -> 1.0 / n;
System.out.println("Reciprocal of 4 is " + myPval.getValue(4.0));
- Resultado: 0.25.
Inferência de Tipos
Tipo do parâmetro inferido pelo contexto:
(n) -> 1.0 / n; // Tipo inferido como double
Tipo explicitamente declarado (opcional):
(double n) -> 1.0 / n;
Regras de Compatibilidade
- O tipo e número de parâmetros na expressão lambda devem corresponder ao método abstrato.
(int x, int y) -> x + y;
Conclusão
Interfaces funcionais possibilitam o uso de lambdas.
Expressões lambda fornecem uma implementação concisa para o método abstrato.
Contextos de tipo de destino e compatibilidade de tipos são cruciais para seu uso.
Top comments (0)