Metodereference i Java
Før vi går i gang med praksis med Stream API, bør vi undersøge nogle genveje til lambdaudtryk. Programmører omtaler disse "genveje" som syntaktisk sukker.
I dette kapitel vil vi diskutere metodereferencer og hvordan de kan bruges som erstatninger for lambdaudtryk.
Metodereferencer
Lad os se på et simpelt eksempel på et lambdaudtryk og forsøge at erstatte det med en metodereference:
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(e -> e.toUpperCase()).forEach(e -> System.out.print(e)); } }
Brugen af to lambdaudtryk fremstår ikke særlig elegant, især når de kan forkortes til metodereferencer fra de klasser, hvor de er erklæret.
Syntaksen vil se således ud:
Example.java
1(Class::Method)
Lad os forbedre ovenstående kode ved hjælp af metodereferencer:
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(String::toUpperCase).forEach(System.out::print); } }
Metoden toUpperCase er en del af String-klassen, så vi bruger konstruktionen String::toUpperCase. Bemærk, at når du bruger en metodereference, vil operationen blive anvendt på hvert element, så der er ikke behov for at bruge et lambdaudtryk til dette. Vi har også erstattet udskrivningen til skærmen med System.out::print, som også er en metodereference. Programmet vil anvende metoden System.out.print() på hvert element.
I øvrigt foreslår IntelliJ IDEA ofte selv at erstatte lambdaudtryk med metodereferencer, hvis en sådan operation er mulig, så du behøver ikke at huske syntaksen hver gang.
På denne måde vil IntelliJ IDEA selv foreslå at forbedre din kode ved hjælp af metode-referencer.
Opsummering
Sammenfattende tilføjer metode-referencer ikke nogen programmæssig byrde. De optimerer ikke processen, men de gør den heller ikke mere kompliceret. Denne konstruktion er blot for at reducere den skrevne kode en smule og forbedre læsbarheden. Om du vil bruge lambda-udtryk eller metode-referencer er op til dig. For eksempel finder jeg det tydeligere at skrive et lambda-udtryk, og derefter vil IntelliJ automatisk erstatte det med en metode-reference.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Can you show more examples of method references?
What are the different types of method references in Java?
When should I use a method reference instead of a lambda expression?
Fantastisk!
Completion rate forbedret til 4
Metodereference i Java
Stryg for at vise menuen
Før vi går i gang med praksis med Stream API, bør vi undersøge nogle genveje til lambdaudtryk. Programmører omtaler disse "genveje" som syntaktisk sukker.
I dette kapitel vil vi diskutere metodereferencer og hvordan de kan bruges som erstatninger for lambdaudtryk.
Metodereferencer
Lad os se på et simpelt eksempel på et lambdaudtryk og forsøge at erstatte det med en metodereference:
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(e -> e.toUpperCase()).forEach(e -> System.out.print(e)); } }
Brugen af to lambdaudtryk fremstår ikke særlig elegant, især når de kan forkortes til metodereferencer fra de klasser, hvor de er erklæret.
Syntaksen vil se således ud:
Example.java
1(Class::Method)
Lad os forbedre ovenstående kode ved hjælp af metodereferencer:
Main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(String::toUpperCase).forEach(System.out::print); } }
Metoden toUpperCase er en del af String-klassen, så vi bruger konstruktionen String::toUpperCase. Bemærk, at når du bruger en metodereference, vil operationen blive anvendt på hvert element, så der er ikke behov for at bruge et lambdaudtryk til dette. Vi har også erstattet udskrivningen til skærmen med System.out::print, som også er en metodereference. Programmet vil anvende metoden System.out.print() på hvert element.
I øvrigt foreslår IntelliJ IDEA ofte selv at erstatte lambdaudtryk med metodereferencer, hvis en sådan operation er mulig, så du behøver ikke at huske syntaksen hver gang.
På denne måde vil IntelliJ IDEA selv foreslå at forbedre din kode ved hjælp af metode-referencer.
Opsummering
Sammenfattende tilføjer metode-referencer ikke nogen programmæssig byrde. De optimerer ikke processen, men de gør den heller ikke mere kompliceret. Denne konstruktion er blot for at reducere den skrevne kode en smule og forbedre læsbarheden. Om du vil bruge lambda-udtryk eller metode-referencer er op til dig. For eksempel finder jeg det tydeligere at skrive et lambda-udtryk, og derefter vil IntelliJ automatisk erstatte det med en metode-reference.
Tak for dine kommentarer!