ProgrammatieJava Senior Developer

Hoe werken enums in Java, welke bijzonderheden zijn verbonden aan hun gebruik, en waarom is enum niet alleen een eenvoudige verzameling constanten?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

In Java is enum een klasse-type, afgeleid van java.lang.Enum, dat een set van beperkte objecten-constanten voorstelt, maar niet alleen beperkt is tot een set namen: enums kunnen worden uitgebreid met methoden, velden, een constructor, interfaces implementeren en gedrag toevoegen.

Voorbeeld:

enum Dag { MAANDAG("Werkdag"), ZATERDAG("Weekend"); private String beschrijving; Dag(String beschrijving) { this.beschrijving = beschrijving; } public String getBeschrijving() { return beschrijving; } } Dag d = Dag.ZATERDAG; System.out.println(d.getBeschrijving()); // "Weekend"

Bijzonderheden:

  • Enum garandeert de uniekheid van constanten: instanties zijn singletons.
  • Interfaces kunnen worden geïmplementeerd.
  • Elk waarde heeft zijn eigen klasse (methoden per waarde kunnen worden overschreven).
  • Enum is beschermd tegen klonen en het creëren van nieuwe instanties via reflection.

Vraag met een valstrik

Vraag: "Kun je in een enum methoden voor sommige waarden van de enum overschrijven? Zo ja, hoe?"

Vaak fout: men veronderstelt ten onrechte dat het gedrag van alle waarden altijd hetzelfde is.

Correct antwoord: Ja, specifieke implementaties voor afzonderlijke constanten zijn mogelijk.

Voorbeeld:

enum Operatie { PLUS { double toepassen(double x, double y) { return x + y; } }, MINUS { double toepassen(double x, double y) { return x - y; } }; abstract double toepassen(double x, double y); }

Voorbeelden van echte fouten door het onbekend zijn met de bijzonderheden van het onderwerp


Verhaal

In het systeem voor het bijhouden van automobilisten werden statussen in enums opgeslagen, maar er werd geen extra veld voor de API-code geïmplementeerd — ontwikkelaars probeerden de enum te verlengen via overerving, wat verboden is. Uiteindelijk moesten ze het opslagmodel van statussen herschrijven.


Verhaal

In een internetwinkel "depaketeerden" programmeurs de enum met een private constructor via een reflection-tool om een valse instantie voor tests te creëren, maar kregen een Exception: enums zijn beschermd tegen het creëren van nieuwe instanties. CI slaagde niet, de tests faalden.


Verhaal

In een oud project werden de waarden van de enum vergeleken met equals(), en niet met ==. Verrassend genoeg ontstonden er problemen bij deserialisatie: enum waarden worden altijd vergeleken met ==, omdat dit singletons zijn.