Questa probabilmente non è una lista completa, e nessuna di queste è stata finalizzata per quanto ne so, ma ne ho trovate alcune.
Abbiamo anche module
, exports
, provides
, uses
, with
, to
e requires
; ha spiegato here:
Il sistema di modulo potrebbe identificare usi di servizi attraverso la scansione dei file di classe in manufatti di moduli per le invocazioni dei metodi ServiceLoader :: carico, ma che sarebbe sia lento e inaffidabile. Che un modulo utilizza un particolare servizio è un aspetto fondamentale della definizione di quel modulo, quindi sia per l'efficienza e chiarezza esprimiamo che nella dichiarazione del modulo con un utilizza clausola:
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;
}
Il sistema modulare in grado di identificare i fornitori di servizi mediante scansione risorse del modulo per le voci di risorse META-INF/servizi, come fa oggi la classe ServiceLoader. Che un modulo fornisce un'implementazione di un particolare servizio è altrettanto fondamentale, tuttavia, in modo esprimiamo che nella dichiarazione del modulo con una clausola di fornisce:
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;
}
anche view
e permits
:
Nei sistemi software di grandi dimensioni è spesso utile definire più viste della stessa modulo. Una vista può essere dichiarata per uso generale da qualsiasi altro modulo, mentre un'altra fornisce l'accesso alle interfacce interne destinate esclusivamente all'uso di un insieme selezionato di moduli strettamente correlati.
Ad esempio con JNDI vogliamo che com.sun.jndi.toolkit.url sia visibile solo per i moduli cosnaming e kerberos, come specificato nella dichiarazione del modulo.
view jdk.jndi.internal {
exports com.sun.jndi.toolkit.url.*;
exports sun.net.dns.*;
permits jdk.cosnaming;
permits jdk.kerberos;
}
In questo modo abbiamo più flessibilità per definire i confini del modulo.
Ho anche sentito parlare di optional
.
Penso che a un certo punto avremo anche 'ref' e' any'. –
@PaulBoddington certamente non in Java 9 per * qualsiasi * parola chiave. Questo è Valhalla, cioè. 10 o successivo. – kervin
* "Come verrà gestita la retrocompatibilità" *, presumibilmente lo stesso di sempre: è necessario compilare i file interessati con una versione sorgente precedente – the8472