Dies ist wahrscheinlich keine vollständige Liste, und nichts davon wurde nach meinem besten Wissen abgeschlossen, aber ich habe ein paar gefunden.
Wir haben auch module
, exports
, provides
, uses
, with
, to
und requires
; here erklärt:
Das Modulsystem Nutzung der Dienste durch Scannen der Klassendateien in Modul Artefakte für Anrufungen der ServiceLoader :: load Methoden identifizieren kann, aber das würde sowohl langsam und unzuverlässig sein. Dass ein Modul einen bestimmten Dienst verwendet, ist ein wesentlicher Aspekt dieser Moduls Definition, so dass für beide Effizienz und Klarheit wir, dass in dem Modul Erklärung äußern mit einem uses-Klausel:
module java.sql {
requires public java.logging;
requires public java.xml;
exports java.sql;
exports javax.sql;
exports javax.transaction.xa;
uses java.sql.Driver;
}
Das Modulsystem könnte Service Provider durch Scannen identifizieren Modul-Artefakte für META-INF-/services-Ressourceneinträge, wie die ServiceLoader-Klasse heute tut. Dass ein Modul eine Implementierung eines bestimmten Dienst bereitstellt, ist ebenso von grundlegender Bedeutung, aber, so dass wir ausdrücken, dass in der Erklärung des Moduls mit einer Klausel sieht vor:
module com.mysql.jdbc {
requires java.sql;
requires org.slf4j;
exports com.mysql.jdbc;
provides java.sql.Driver with com.mysql.jdbc.Driver;
}
...
module java.base {
...
exports sun.reflect to
java.corba,
java.logging,
java.sql,
java.sql.rowset,
jdk.scripting.nashorn;
}
Auch view
und permits
:
In großen Softwaresystemen ist es oft nützlich, mehrere Ansichten derselben zu definieren Modul. Eine Ansicht kann von jedem anderen Modul zur allgemeinen Verwendung deklariert werden, während eine andere Ansicht Zugriff auf interne Schnittstellen bietet, die nur für die Verwendung durch eine Auswahl eng verwandter Module bestimmt sind.
Zum Beispiel möchten wir mit JNDI, dass com.sun.jndi.toolkit.url nur für Cosnaming- und Kerberos-Module sichtbar ist, wie in der Moduldeklaration angegeben.
view jdk.jndi.internal {
exports com.sun.jndi.toolkit.url.*;
exports sun.net.dns.*;
permits jdk.cosnaming;
permits jdk.kerberos;
}
So können wir mehr Flexibilität Modulgrenzen zu definieren.
Ich habe auch Erwähnung von optional
gehört.
Ich denke irgendwann werden wir auch 'ref' und' any' bekommen. –
@PaulBoddington sicherlich nicht in Java 9 für * any * Schlüsselwort. Das ist Valhalla, d. 10 oder später. – kervin
* "Wie wird die Rückwärtskompatibilität gehandhabt" *, vermutlich das gleiche wie immer: Sie müssen betroffene Dateien mit einer älteren Quellversion kompilieren – the8472