DEV Community

Interfaces funcionais

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)