Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Metodereference i Java | Avancerede Java-Funktioner og -Teknikker
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Java Datastrukturer

bookMetodereference 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

Main.java

copy
1234567891011
package 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

Example.java

copy
1
(Class::Method)

Lad os forbedre ovenstående kode ved hjælp af metodereferencer:

Main.java

Main.java

copy
1234567891011
package 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.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 4

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

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?

bookMetodereference 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

Main.java

copy
1234567891011
package 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

Example.java

copy
1
(Class::Method)

Lad os forbedre ovenstående kode ved hjælp af metodereferencer:

Main.java

Main.java

copy
1234567891011
package 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.

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 4
some-alt