Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Eclipse sagt mir, dass Klassen aus dem java.awt Package nicht mit exportiert werden. Aber sollte das "transitive" keyword nicht gerade dafür sorgen, dass diese Klassen implizit exportiert werden? Wenn ich google find ich dazu einfach nichts. Was mache ich falsch?
Meiner Interpretation nach bedeutet "transitive", dass alle Unter-Packages mit required werden.
Also wenn du die Packages com.jukusoft.pk1.package1, com.jukusoft.pk1.package2 und com.jukusoft.pk1.package3 hast, würde ein
Java:
required transitive com.jukusoft.pk1;
alle 3 Packages requiren. Allerdings bedeutet das in meinen Augen nicht zwingend, dass auch nicht-exportierte Packages mit required werden. Das würde ja den ganzen Sinn hinter Jigsaw kaputt machen.
Außerdem solltest du das sowieso nicht tun, weil du dann spätestens mit Java 10 Probleme erhälst. Nicht-exportierte Packages sind halt einfach nicht für Anwendungen gedacht.
Im Grunde genommen kann man das transitive also auch übersetzen in:
Wenn ich jetzt aber com.jukusoft.pk1.package3 nicht exportiert habe, dann sollte das so oder so fehlschlagen. Genau das ist ja der Sinn hinter Jigsaw, einen neuen Scope hinzuzufügen, den man nicht umgehen kann (wie damals mit Reflection der Zugriff auf sun.misc.Unsafe).
Ich habe gerade nochmal bei den entsprechenden Leuten nachgefragt:
In dem Beispiel ist mir ein Fehler unterlaufen, weil wir von Modulen und nicht von Packages sprechen, statt package1 muss es also module1 heißen und "Unter-Packages" --> Unter-Module (Schönheitsfehler), aber die Readability (der Scope) bleibt unverändert, d.h. wenn ein package nicht exported wurde, kannst du trotzdem nicht darauf zugreifen.
EDIT:
Desweiteren stellt das Package com.jukusoft.module1.module2 kein Unter-Modul von com.jukusoft.module1 dar, d.h. das sind für Java völlig verschiedene Module, die Transitivität greift hier nicht. https://blog.codefx.org/java/java-module-system-tutorial/#modules
Ich habe gerade nochmal bei den entsprechenden Leuten nachgefragt:
In dem Beispiel ist mir ein Fehler unterlaufen, weil wir von Modulen und nicht von Packages sprechen, statt package1 muss es also module1 heißen und "Unter-Packages" --> Unter-Module (Schönheitsfehler), aber die Readability (der Scope) bleibt unverändert, d.h. wenn ein package nicht exported wurde, kannst du trotzdem nicht darauf zugreifen.
...
Der Sinn hinter dem "transitive" keyword ist ja das, dass wenn jemand dein Modul required, alle Module die von diesem Modul transitiv required werden implizit mit required werden..... hoffe ich hab das verständlich ausgedrückt.
Problem:
Ich habe ein Modul das Klassen aus dem Modul java.desktop verwendet.
Eine der Klassen in meinem Modul hat einen Konstruktor der wie folgt aussieht
Java:
public SimpleImage(BufferedImage image) {
// DO THINGS!
}
BufferedImage ist jetzt eine Klasse aus java.desktop.
Der Nutzer meines Moduls sollte jedoch nicht extra explizit java.desktop requiren.
Deswegen möchte ich über ein "requires transitive" dafür sorgen, dass java.desktop implizit mitgegeben wird wenn jemand mein Modul required.
Das funktioniert auch mit allen selbst geschriebenen Modulen. Nur bei java.desktop meckert Eclipse rum dass ich das Modul nicht implizit mitgegeben hätte.
Der Sinn hinter dem "transitive" keyword ist ja das, dass wenn jemand dein Modul required, alle Module die von diesem Modul transitiv required werden implizit mit required werden.....
Das funktioniert auch mit allen selbst geschriebenen Modulen. Nur bei java.desktop meckert Eclipse rum dass ich das Modul nicht implizit mitgegeben hätte.
Hmmm...
Dann weiß ich gerade leider auch nicht weiter. Theoretisch müsste es gehen. Oder aber der End-Nutzer muss ebenfalls transitive benutzen. Habe transitive selbst noch nie in Jigsaw verwendet.