ProgrammatieBackend ontwikkelaar

Wat is het package-private toegangs niveau in Java, hoe werkt het en in welke gevallen moet het worden gebruikt?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

In Java is package-private het standaard toegangs niveau (zonder dat publieke, beschermde of privé-modifiers worden aangegeven). Een dergelijk lid van een klasse (methode, veld of de klasse zelf) is alleen toegankelijk vanuit klassen in hetzelfde pakket.

  • Voorbeeld:
    class MyClass { /* ... */ } void doSomething() { /* ... */ }
  • Niet toegankelijk buiten het pakket, wordt niet overgeërfd zoals beschermd.
  • Gebruikt voor de interne logica van het pakket, om de implementatie te beschermen tegen externe toegang, maar interne toegang tot de pakketcodes mogelijk te maken.

Voorbeeld:

// Bestand: com/example/internal/Helper.java class Helper { static void help() { System.out.println("geholpen"); } }

Gebruik altijd package-private als de klasse of methode een interne implementatiedetail is.

Misleidende vraag

Vraag: Kan een package-private klasse zichtbaar zijn binnen een ander pakket via overerving of import?

Antwoord: Nee, package-private leden zijn niet toegankelijk via overerving of import uit andere pakketten — ze zijn alleen toegankelijk binnen hun eigen pakket.

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


Verhaal

In een groot project begonnen verschillende teams package-private klassen te gebruiken voor hulplogica. Toen de code opnieuw werd gebruikt uit andere pakketten, lukte dit niet — toegang was onmogelijk. Als gevolg moesten de klassen publiek worden gemaakt, wat de interne implementatie blootstelde.


Verhaal

In een multi-modulproject veroorzaakten package-private klassen problemen bij het schrijven van module tests: tests in een ander pakket zagen de package-private methoden niet, en het was nodig om de testen naar het oorspronkelijke pakket te verplaatsen of het toegangs niveau te verzwakken.


Verhaal

Bij het migreren van code naar een nieuw pakket waren er onverwachte compile-tijdfouten — veel methoden en klassen "verdwijnen" onverwachts omdat ze package-private waren en niet meer toegankelijk waren na het wijzigen van het pakket.