logo

Interfacce funzionali Java

Un'interfaccia che contiene esattamente un metodo astratto è nota come interfaccia funzionale. Può avere un numero qualsiasi di metodi statici predefiniti ma può contenere solo un metodo astratto. Può anche dichiarare metodi della classe oggetto.

L'interfaccia funzionale è anche nota come Interfacce a metodo astratto singolo o Interfacce SAM. È una nuova funzionalità di Java, che aiuta a raggiungere un approccio di programmazione funzionale.

test e tipi di software

Esempio 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'); } } 
Provalo adesso

Produzione:

 Hello there 

Un'interfaccia funzionale può avere metodi di classe oggetto. Vedere nell'esempio seguente.

Esempio 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'); } } 
Provalo adesso

Produzione:

 Hello there 

Interfaccia funzionale non valida

Un'interfaccia funzionale può estendere un'altra interfaccia solo quando non ha alcun metodo astratto.

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

Produzione:

 compile-time error 

Esempio 3

Nell'esempio seguente, un'interfaccia funzionale si estende a un'interfaccia non funzionale.

 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(); } } 
Provalo adesso

Produzione:

css per centrare un'immagine
 Hello there Do it now 

Interfacce funzionali predefinite Java

Java fornisce interfacce funzionali predefinite per gestire la programmazione funzionale utilizzando lambda e riferimenti a metodi.

Puoi anche definire la tua interfaccia funzionale personalizzata. Di seguito è riportato l'elenco delle interfacce funzionali inserite nel pacchetto java.util.function.


Interfaccia Descrizione
Biconsumatore Rappresenta un'operazione che accetta due argomenti di input e non restituisce alcun risultato.
Consumatore Rappresenta un'operazione che accetta un singolo argomento e non restituisce alcun risultato.
Funzione Rappresenta una funzione che accetta un argomento e restituisce un risultato.
Predicato Rappresenta un predicato (funzione con valore booleano) di un argomento.
Bifunzione Rappresenta una funzione che accetta due argomenti e restituisce un risultato.
Operatore Binario Rappresenta un'operazione su due operandi dello stesso tipo di dati. Restituisce un risultato dello stesso tipo degli operandi.
BiPredicate Rappresenta un predicato (funzione con valore booleano) di due argomenti.
BooleanSupplier Rappresenta un fornitore di risultati con valori booleani.
DoubleBinaryOperator Rappresenta un'operazione su due operandi di tipo doppio e restituisce un valore di tipo doppio.
DoppioConsumatore Rappresenta un'operazione che accetta un singolo argomento di tipo double e non restituisce alcun risultato.
Doppia funzione Rappresenta una funzione che accetta un argomento di tipo doppio e produce un risultato.
Doppio predicato Rappresenta un predicato (funzione con valore booleano) di un argomento di tipo doppio.
DoubleSupplier Rappresenta un fornitore di risultati di doppia tipologia.
DoubleToIntFunction Rappresenta una funzione che accetta un argomento di tipo double e produce un risultato di tipo int.
Funzione DoubleToLong Rappresenta una funzione che accetta un argomento di tipo doppio e produce un risultato di tipo lungo.
DoubleUnaryOperator Rappresenta un'operazione su un singolo operando di tipo doppio che produce un risultato di tipo doppio.
IntBinaryOperator Rappresenta un'operazione su due operandi di tipo int e restituisce un risultato di tipo int.
IntConsumatore Rappresenta un'operazione che accetta un singolo argomento intero e non restituisce alcun risultato.
Funzione int Rappresenta una funzione che accetta un argomento intero e restituisce un risultato.
IntPredicato Rappresenta un predicato (funzione con valore booleano) di un argomento intero.
IntSupplier Rappresenta un fornitore di tipo intero.
IntToDoubleFunction Rappresenta una funzione che accetta un argomento intero e restituisce un doppio.
Funzione IntToLong Rappresenta una funzione che accetta un argomento intero e restituisce un valore long.
IntUnaryOperator Rappresenta un'operazione su un singolo operando intero che produce un risultato intero.
LongBinaryOperator Rappresenta un'operazione su due operandi di tipo lungo e restituisce un risultato di tipo lungo.
LongConsumer Rappresenta un'operazione che accetta un singolo argomento di tipo lungo e non restituisce alcun risultato.
Funzione lunga Rappresenta una funzione che accetta un argomento di tipo lungo e restituisce un risultato.
Predicato lungo Rappresenta un predicato (funzione con valore booleano) di un argomento di tipo lungo.
LongSupplier Rappresenta un fornitore di risultati di tipo lungo.
LongToDoubleFunction Rappresenta una funzione che accetta un argomento di tipo lungo e restituisce un risultato di tipo double.
LongToIntFunction Rappresenta una funzione che accetta un argomento di tipo lungo e restituisce un risultato intero.
LongUnaryOperator Rappresenta un'operazione su un singolo operando di tipo lungo che restituisce un risultato di tipo lungo.
ObjDoubleConsumer Rappresenta un'operazione che accetta un oggetto e un doppio argomento e non restituisce alcun risultato.
ObjIntConsumer Rappresenta un'operazione che accetta un oggetto e un argomento intero. Non restituisce risultato.
ObjLongConsumer Rappresenta un'operazione che accetta un oggetto e un argomento lungo, non restituisce alcun risultato.
Fornitore Rappresenta un fornitore di risultati.
ToDoubleBiFunction Rappresenta una funzione che accetta due argomenti e produce un risultato di tipo doppio.
ToDoubleFunction Rappresenta una funzione che restituisce un risultato di tipo doppio.
ToIntBiFunction Rappresenta una funzione che accetta due argomenti e restituisce un numero intero.
ToIntFunction Rappresenta una funzione che restituisce un numero intero.
ToLongBiFunction Rappresenta una funzione che accetta due argomenti e restituisce un risultato di tipo lungo.
ToLongFunction Rappresenta una funzione che restituisce un risultato di tipo lungo.
UnaryOperator Rappresenta un'operazione su un singolo operando che restituisce un risultato dello stesso tipo del suo operando.