ProgrammatieBackend ontwikkelaar

Wat is een switch-expressie in Java, hoe verschilt het van de klassieke switch en wat zijn de bijzonderheden bij het gebruik ervan?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Geschiedenis van de vraag:

Tot Java 12 werd de switch-operator uitsluitend als statement gebruikt. Met de release van Java 12/14 zijn switch-expressies (switch expression) geïntroduceerd, die de syntaxis en mogelijkheden van de operator hebben uitgebreid. Switch-expressies zijn bedoeld voor een beknoptere en expressievere code.

Probleem:

De klassieke switch leidt vaak tot fouten: een vergeten break leidt tot fall-through, leesbaarheid bij meerdere cases, de onmogelijkheid om rechtstreeks een resultaat in een expressie terug te geven, en het ontbreken van uitgebreide waarde-controle.

Oplossing:

Een switch-expressie kan een waarde retourneren, gebruik maken van pijl-syntaxis, ondersteuning bieden voor uitgebreide analyse tijdens compilatie en null verwerken via default. De syntaxis is:

String result = switch(day) { case MONDAY, FRIDAY -> "Werkdag"; case SATURDAY, SUNDAY -> "Weekend"; default -> throw new IllegalArgumentException(); };

Belangrijke kenmerken:

  • Switch is een expressie geworden: het resultaat kan aan een variabele worden toegewezen.
  • De nieuwe syntaxis vergemakkelijkt de leesbaarheid en voorkomt vergeten breaks.
  • Ondersteuning voor meerdere labels (case A, B -> ...).

Vragen met een addertje onder het gras.

Kan switch werken met enums, strings en null?

Werkt met enums vanaf Java 5. Met strings vanaf Java 7. Null wordt alleen via default verwerkt, anders krijg je een NPE.

switch(day) { // day == null default: System.out.println("null"); } // werkt

Wat gebeurt er als niet alle varianties van enum worden geïmplementeerd in een switch-expressie?

De compiler vereist default of implementatie voor alle waarden. Bij afwezigheid hiervan zal er een compileerfout optreden.

Kan ik break gebruiken in de nieuwe switch-expressie?

In de pijlvorm is break niet nodig. Als een blok wordt gebruikt (case X -> { ... }), kan yield worden toegepast om een waarde terug te geven:

int num = switch(x) { case 1 -> 10; case 2 -> { yield 20; } default -> 0; };

Typische fouten en anti-patronen

  • Het ontbreken van default bij het werken met non-nullable types leidt tot compileerfouten.
  • Het proberen om null buiten default te verwerken resulteert in een NullPointerException.
  • Gebruik van switch met veel geneste structuren, in plaats van polymorfisme.

Voorbeeld uit de praktijk

Negatief geval

Klassieke switch met int zonder break:

switch(type) { case 1: actionA(); case 2: actionB(); // wordt aangeroepen voor zowel type==1 als type==2 }

Voordelen:

  • Snel te schrijven.

Nadelen:

  • Onvolkomenheden leiden tot kritieke bugs.
  • Code is moeilijk te lezen en te onderhouden.

Positief geval

Gebruik van de nieuwe switch-expressie voor het toewijzen van enum aan resultaat:

String status = switch(orderStatus) { case PAID -> "Betaald"; case CANCELED -> "Geannuleerd"; default -> "In behandeling"; };

Voordelen:

  • Uitgebreide analyse — minder fouten.
  • Code is compact en leesbaar.

Nadelen:

  • Vereist Java 14+ en kennis van moderne syntaxis.