ProgrammatieBackend Java ontwikkelaar

Wat zijn varargs (variabele lengte argumenten) in Java, hoe werkt hun interne implementatie en welke nuances en beperkingen bestaan er bij het gebruik ervan?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

Varargs — een speciale syntaxis die een methode in staat stelt om een variabel (enig) aantal argumenten van hetzelfde type te accepteren. In de declaratie van de methode wordt zo'n parameter aangeduid als Type... naam (bijvoorbeeld int... nums). Binnen de methode worden de argumenten gezien als een normale array.

Voorbeeld:

public void printNumbers(int... nums) { for (int n : nums) { System.out.print(n + " "); } }

Je kunt het zo aanroepen:

printNumbers(1, 2, 3, 4); // of printNumbers();

Interne implementatie: bij het aanroepen van een methode met varargs creëert de compiler automatisch een array van het juiste type.

Beperkingen en nuances:

  • Een varargs-parameter kan er maar één zijn en moet altijd de laatste in de parameterlijst zijn.
  • De uitbreiding van varargs (Type...) is in wezen een array (Type[]).
  • Het doorgeven van null: printNumbers(null) zal een NPE veroorzaken bij het proberen te itereren.
  • Het overbelasten van methoden met varargs kan leiden tot ambiguïteit in aanroepen.

Spelvraag

Vraag: "Kan je een methode met meerdere varargs-parameters declareren?"

Dikwijls misvoren: velen denken dat je public void example(int... a, String... b) kunt declareren, maar dit zal een compilatiefout veroorzaken.

Juiste antwoord: Nee, er kan maar één varargs-parameter zijn, en deze moet de laatste zijn.

Voorbeelden van echte fouten door onwetendheid over de nuances van het onderwerp


Verhaal

In de bedrijfslogboekbibliotheek werden overbelaste versies van methoden met varargs en arrays geïmplementeerd. Bij het doorgeven van een array in plaats van een set elementen werd niet de goede versie van de methode toegepast, waardoor de array als object werd gelogd, en niet als de inhoud. Dit veroorzaakte verwarring bij het analyseren van logs.


Verhaal

In de integratieservice accepteerde het aanroepen van een methode met varargs null, zonder op NPE te controleren. Het systeem "viel" onverwachts uit bij het proberen te itereren over elementen, aangezien ten minste een lege array werd verwacht.


Verhaal

In een e-commerce project raakten ze in de knoop met de overbelastingen van methoden: er was een methode send(String subject, String... emails) en een andere — send(String subject, String[] emails). Bij het doorgeven van een array koos de compiler impliciet niet de juiste methode. Resultaat: e-mails werden niet naar klanten verzonden.