Java 8 Metodo di riferimento è uno dei concetti che vengono forniti con le nuove espressioni Lambda che vengono in JDK 8, lo spiegheremo passo dopo passo. Fino a questo momento in Java c’erano due concetti fondamentali, classi e interfacce.
con esso arriva Le espressioni Java 8 Lambda appaiono:
Queste espressioni ci permettono già un riutilizzo maggiore del nostro codice di riutilizzare le classi possiamo semplicemente riutilizzare le funzioni. Questi sono convertiti per metterlo in qualche modo nell’unità di codice minima. Per Java per integrare questi concetti, dobbiamo supporre che le concessioni debbano essere la concessione da quando Java consente solo la gestione di classi e interfacce. Pertanto, le espressioni lambda vengono interfacce che supportano solo un metodo astratto. In Java 8 ci sono molte di queste interfacce predefinite. Per indirizzare il nostro esempio, supporteremo l’interfaccia dei consumatori < che ha un singolo metodo che viene chiamato Accetta che riceve un parametro e non restituisce nulla. È una delle interfacce funzionali più semplici.
package com.arquitecturajava.lambdareferencias;import java.util.function.Consumer;public class Principal {public static void main(String args) {Consumer<String> consumidor = (x) -> System.out.println(x); consumidor.accept("hola");}}
In questo caso abbiamo assegnato al consumatore dell’interfaccia funzionale a un’espressione di lambda che si adatta con esso. Richiama che l’interfaccia riceve un parametro e non restituisce nulla, il risultato stamperà Ciao dalla console:
Potremmo voler avere una maggiore flessibilità nel nostro codice e sostenerci in un metodo che ci consente di variare l’espressione della lambda e il testo che stampiamo.
package com.arquitecturajava.lambdareferencias;import java.util.function.Consumer;public class Principal {public static void main(String args) {Consumer<String> consumidor = (x) -> System.out.println(x);consumidor.accept("hola");procesar ((x)->System.out.println(x),"hola2");}public static <T> void procesar(Consumer<T> expresion, T mensaje) {expresion.accept(mensaje);}}
Il risultato sarà simile:
java 8 Metodo di riferimento
Ora le espressioni lambda che ti permettono di aggiungere più flessibilità al codice. Ad esempio, possiamo avere un altro metodo stampa nella stessa classe conforme al modello dell’espressione lambda (riceve un parametro e non restituisce nulla).
Possiamo utilizzare la sintassi del metodo di riferimento Java 8 per invocare il processo processo che ci supporta in questa nuova funzione.
package com.arquitecturajava.lambdareferencias;import java.util.function.Consumer;public class Principal {public static void main(String args) {Consumer<String> consumidor = (x) -> System.out.println(x);consumidor.accept("hola");procesar ((x)->System.out.println(x),"hola2");procesar(Principal::imprimir,"hola3");}public static <T> void procesar(Consumer<T> expresion, T mensaje) {expresion.accept(mensaje);}public static void imprimir(String mensaje) {System.out.println("---------");System.out.println(mensaje);System.out.println("---------");}}
Come puoi vedere Abbiamo utilizzato la sintassi principale :: Stampa per andare come riferimento una funzione che è nel nostro Programma proprio.
La console mostrerà:
Porterà una grande flessibilità al metodo poiché se disponiamo di un’altra classe che ha un metodo che riceve un parametro e non restituire puoi anche usarlo:
package com.arquitecturajava.lambdareferencias;public class Impresora {public void imprimir (String mensaje) {System.out.println("imprimiendo impresora");System.out.println(mensaje);System.out.println("imprimiendo impresora");}}
E n Questo caso abbiamo creato la classe della stampante, possiamo utilizzare il tuo metodo Stampa come se fosse un riferimento a un’espressione di lambda.
package com.arquitecturajava.lambdareferencias;import java.util.function.Consumer;public class Principal {public static void main(String args) {Consumer<String> consumidor = (x) -> System.out.println(x);consumidor.accept("hola");procesar ((x)->System.out.println(x),"hola2");procesar(Principal::imprimir,"hola3");Impresora i= new Impresora();procesar(i::imprimir,"hola4");}public static <T> void procesar(Consumer<T> expresion, T mensaje) {expresion.accept(mensaje);}public static void imprimir(String mensaje) {System.out.println("---------");System.out.println(mensaje);System.out.println("---------");}}
Il programma principale sarà il programma Stampa la funzionalità della stampante: