logo

Interfaces Funcionais Java

Uma interface que contém exatamente um método abstrato é conhecida como interface funcional. Ele pode ter qualquer número de métodos estáticos padrão, mas pode conter apenas um método abstrato. Também pode declarar métodos de classe de objeto.

A Interface Funcional também é conhecida como Interfaces de Método Abstrato Único ou Interfaces SAM. É um novo recurso em Java, que ajuda a alcançar uma abordagem de programação funcional.


Exemplo 1

 @FunctionalInterface interface sayable{ void say(String msg); } public class FunctionalInterfaceExample implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample fie = new FunctionalInterfaceExample(); fie.say('Hello there'); } } 
Teste agora

Saída:

 Hello there 

Uma interface funcional pode ter métodos de classe de objeto. Veja no exemplo a seguir.

Exemplo 2

 @FunctionalInterface interface sayable{ void say(String msg); // abstract method // It can contain any number of Object class methods. int hashCode(); String toString(); boolean equals(Object obj); } public class FunctionalInterfaceExample2 implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample2 fie = new FunctionalInterfaceExample2(); fie.say('Hello there'); } } 
Teste agora

Saída:

 Hello there 

Interface funcional inválida

Uma interface funcional pode estender outra interface somente quando não possui nenhum método abstrato.

 interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); } 

Saída:

 compile-time error 

Exemplo 3

No exemplo a seguir, uma interface funcional se estende a uma interface não funcional.

 interface Doable{ default void doIt(){ System.out.println('Do it now'); } } @FunctionalInterface interface Sayable extends Doable{ void say(String msg); // abstract method } public class FunctionalInterfaceExample3 implements Sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample3 fie = new FunctionalInterfaceExample3(); fie.say('Hello there'); fie.doIt(); } } 
Teste agora

Saída:

 Hello there Do it now 

Interfaces funcionais predefinidas Java

Java fornece interfaces funcionais predefinidas para lidar com programação funcional usando lambda e referências de método.

Você também pode definir sua própria interface funcional personalizada. A seguir está a lista de interfaces funcionais que são colocadas no pacote java.util.function.


Interface Descrição
Biconsumidor Representa uma operação que aceita dois argumentos de entrada e não retorna nenhum resultado.
Consumidor Representa uma operação que aceita um único argumento e não retorna nenhum resultado.
Função Representa uma função que aceita um argumento e retorna um resultado.
Predicado Representa um predicado (função com valor booleano) de um argumento.
BiFunção Representa uma função que aceita dois argumentos e retorna um resultado.
Operador Binário Representa uma operação sobre dois operandos do mesmo tipo de dados. Ele retorna um resultado do mesmo tipo dos operandos.
BiPredicado Representa um predicado (função com valor booleano) de dois argumentos.
Fornecedor booleano Representa um fornecedor de resultados com valor booleano.
Operador DuploBinário Representa uma operação sobre dois operandos do tipo double e retorna um valor do tipo double.
Consumidor Duplo Representa uma operação que aceita um único argumento de tipo duplo e não retorna nenhum resultado.
Função Dupla Representa uma função que aceita um argumento de tipo duplo e produz um resultado.
Predicado Duplo Representa um predicado (função com valor booleano) de um argumento de tipo duplo.
Fornecedor Duplo Representa um fornecedor de resultados do tipo duplo.
Função DoubleToInt Representa uma função que aceita um argumento do tipo double e produz um resultado do tipo int.
Função DoubleToLong Representa uma função que aceita um argumento de tipo duplo e produz um resultado de tipo longo.
Operador DuploUnário Representa uma operação em um único operando do tipo duplo que produz um resultado do tipo duplo.
Operador IntBinário Representa uma operação sobre dois operandos do tipo int e retorna um resultado do tipo int.
Consumidor Interno Representa uma operação que aceita um único argumento inteiro e não retorna nenhum resultado.
Função Int Representa uma função que aceita um argumento inteiro e retorna um resultado.
IntPredicado Representa um predicado (função com valor booleano) de um argumento inteiro.
Fornecedor Interno Representa um fornecedor do tipo inteiro.
IntToDoubleFunction Representa uma função que aceita um argumento inteiro e retorna um duplo.
IntToLongFunction Representa uma função que aceita um argumento inteiro e retorna um valor longo.
Operador IntUnário Representa uma operação em um único operando inteiro que produz um resultado inteiro.
Operador Binário Longo Representa uma operação sobre dois operandos do tipo longo e retorna um resultado do tipo longo.
LongConsumidor Representa uma operação que aceita um único argumento de tipo longo e não retorna nenhum resultado.
Função Longa Representa uma função que aceita um argumento de tipo longo e retorna um resultado.
LongPredicado Representa um predicado (função com valor booleano) de um argumento de tipo longo.
Fornecedor Longo Representa um fornecedor de resultados do tipo longo.
Função LongToDouble Representa uma função que aceita um argumento de tipo longo e retorna um resultado de tipo duplo.
Função LongToInt Representa uma função que aceita um argumento de tipo longo e retorna um resultado inteiro.
Operador Unário Longo Representa uma operação em um único operando do tipo longo que retorna um resultado do tipo longo.
ObjDoubleConsumidor Representa uma operação que aceita um objeto e um argumento duplo e não retorna nenhum resultado.
ObjIntConsumidor Representa uma operação que aceita um objeto e um argumento inteiro. Não retorna resultado.
ObjLongConsumidor Representa uma operação que aceita um objeto e um argumento longo, mas não retorna nenhum resultado.
Fornecedor Representa um fornecedor de resultados.
ToDoubleBiFunction Representa uma função que aceita dois argumentos e produz um resultado do tipo duplo.
ToDoubleFunction Representa uma função que retorna um resultado do tipo duplo.
ToIntBiFunction Representa uma função que aceita dois argumentos e retorna um número inteiro.
ToIntFunction Representa uma função que retorna um número inteiro.
ToLongBiFunção Representa uma função que aceita dois argumentos e retorna um resultado do tipo longo.
ToLongFunction Representa uma função que retorna um resultado do tipo longo.
Operador Unário Representa uma operação em um único operando que retorna um resultado do mesmo tipo que seu operando.