In Java ist package-private der "Standard-Zugriffsmodifikator" (ohne Angabe von Sichtbarkeitsmodifikatoren: public, protected, private). Ein solches Klassenmitglied (Methode, Feld oder ganze Klasse) ist nur aus Klassen desselben Packages zugänglich.
class MyClass { /* ... */ } void doSomething() { /* ... */ }
Beispiel:
// Datei: com/example/internal/Helper.java class Helper { static void help() { System.out.println("helped"); } }
Verwenden Sie immer package-private, wenn Klasse oder Methode eine interne Implementierungsdetails sind.
Frage: Kann eine package-private Klasse durch Vererbung oder Import in einem anderen Package sichtbar sein?
Antwort: Nein, auf package-private Mitglieder kann weder durch Vererbung noch durch Import aus anderen Packages zugegriffen werden - sie sind nur innerhalb ihres Packages zugänglich.
Geschichte
In einem großen Projekt begannen verschiedene Teams, package-private Klassen für Utility-Logik zu verwenden. Als der Code versucht wurde, in anderen Packages wiederzuverwenden, funktionierte es nicht - der Zugriff war unmöglich. Infolgedessen mussten die Klassen public gemacht werden, was die interne Implementierung öffnete.
Geschichte
In einem Multi-Modul-Projekt wurden package-private Klassen zum Problem bei der Erstellung von Modultests: Tests in einem anderen Package konnten die package-private Methoden nicht sehen, und es war notwendig, die Tests in das ursprüngliche Package zu verschieben oder den Zugriffslevel zu lockern.
Geschichte
Bei der Migration des Codes in ein neues Package gab es unerwartete Kompilierfehler - viele Methoden und Klassen "verschwanden" plötzlich, weil sie package-private waren und nach dem Wechsel des Packages nicht mehr zugänglich waren.