0Pricing
Java Academy · Lektion

requires und exports

Abhängigkeiten und Sichtbarkeit steuern

requires und exports ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Den Modulgraphen steuern

Zwei Direktiven bestimmen den Modulgraphen: requires deklariert, wovon Ihr Modul abhängt, und exports deklariert, was es offenlegt.

In dieser Lektion untersuchen Sie ihre Varianten sowie die Regeln für Lesbarkeit und Zugänglichkeit, die dadurch entstehen.

Einfaches requires

Ein einfaches requires X; bedeutet: „Dieses Modul liest Modul X.“ Ihr Code kann die exportierten öffentlichen Typen von X verwenden, aber die Consumer Ihres Moduls erfahren nichts über X.

module com.example.app {
    requires java.sql;
}

requires transitive

requires transitive Y; bedeutet: Jedes Modul, das Ihr Modul liest, liest auch Y. Dies ist eine implizite Lesbarkeit und nützlich, wenn Ihre API die Typen von Y offenlegt.

module com.example.api {
    requires transitive java.sql;
}

Wann Sie transitive verwenden

Verwenden Sie transitive, wenn eine Methode Ihrer exportierten API einen Typ aus einem anderen Modul zurückgibt oder als Parameter entgegennimmt. Andernfalls könnten Aufrufer den Rückgabetyp nicht einmal benennen, ohne selbst ein requires zu deklarieren.

So müssen Consumer keine redundanten Abhängigkeiten deklarieren.

requires static

requires static Z; deklariert eine Abhängigkeit nur zur Kompilierungszeit. Das Modul wird zum Kompilieren benötigt, ist aber zur Laufzeit optional – ideal für Annotation-Processor oder optionale Integrationen.

module com.example.app {
    requires static com.example.annotations;
}

Einfaches exports

exports pkg; macht die öffentlichen Typen von pkg für alle Module lesbar, die Ihr Modul benötigen.

module com.example.lib {
    exports com.example.lib.api;
}

Qualifiziertes exports

Ein qualifiziertes exports stellt ein Paket nur bestimmten benannten Modulen mit exports pkg to modA, modB; bereit. Das ist für befreundete Module innerhalb eines größeren Systems nützlich.

module com.example.core {
    exports com.example.core.internal to com.example.web, com.example.batch;
}

opens für Reflexion

exports gewährt Zugriff auf öffentliche Member zur Compile- und Laufzeit. Tiefe Reflexion (private Felder) erfordert stattdessen opens pkg;, wie es Frameworks wie Jackson oder Hibernate verwenden.

module com.example.model {
    exports com.example.model;
    opens com.example.model.entities to com.fasterxml.jackson.databind;
}

Offene Module

Wenn ein gesamtes Modul reflektiven Zugriff benötigt, wie es bei älteren Frameworks häufig vorkommt, deklarieren Sie es als open. Dann ist jedes Paket für Reflexion geöffnet, während normale exports weiterhin den Zugriff zur Kompilierungszeit steuern.

open module com.example.beans {
    requires java.logging;
}

Lesbarkeit und Zugänglichkeit

Beide Bedingungen müssen erfüllt sein, damit Sie den Typ eines anderen Moduls verwenden können:

  • Lesbarkeit: Ihr Modul deklariert requires für das andere Modul
  • Zugänglichkeit: Das andere Modul exportiert das Paket und der Typ ist public

Fehlt eine der beiden Bedingungen, weist der Compiler Ihren Code zurück.

Alles zusammenführen

Ein wohlgeformtes Modul, das JDBC-Typen erneut bereitstellt und Entitäten für eine JSON-Bibliothek öffnet:

module com.example.service {
    requires transitive java.sql;
    requires static com.example.annotations;

    exports com.example.service.api;
    exports com.example.service.spi to com.example.plugins;
    opens com.example.service.dto to com.fasterxml.jackson.databind;
}

Kurze Überprüfung

Wählen Sie die Direktive für erneut bereitgestellte API-Typen.

Zusammenfassung

Sie haben die Direktiven für Abhängigkeiten und Sichtbarkeit gelernt:

  • requires, requires transitive, requires static
  • exports und qualifiziertes exports ... to
  • opens und open module für Reflexion
  • Die Verwendung erfordert sowohl Lesbarkeit als auch Zugänglichkeit

Als Nächstes: Entkopplung mit Services mithilfe von provides und uses.

Häufig gestellte Fragen

Ist die Lektion „requires und exports“ kostenlos?

Ja — der vollständige Text von „requires und exports“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „requires und exports“?

Abhängigkeiten und Sichtbarkeit steuern Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „requires und exports“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. module-info.java
  2. requires und exports
  3. Dienste mit provides/uses
  4. Auf Module migrieren
← Zurück zu Java Academy