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. |