Это, вероятно, не полный список, и все это не было доработано, насколько мне известно, но я нашел несколько.
Мы также module
, exports
, provides
, uses
, with
, to
и requires
; объяснил here:
Модульная система может идентифицировать использование услуг путем сканирования файлов классов в модуле артефактов для призываний методов ServiceLoader :: нагрузки, но это было бы и медленным и ненадежным. То, что модуль использует конкретную услугу является фундаментальным аспектом определения этого модуля, так как для эффективности и ясности мы выражаем, что в объявлении модуля с микросхемой использует раздел:
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;
}
Модульная система может идентифицировать поставщиков услуг путем сканирования модульные артефакты для записей ресурсов META-INF/services, как это делает класс ServiceLoader. Этот модуль обеспечивает реализацию конкретной услуги в равной степени фундаментальным, однако, таким образом мы выражаем, что в объявлении модуля с содержит раздел:
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;
}
view
Также и permits
:
В больших программных системах часто бывает полезно определить несколько видов одного и того же модуль. Один вид может быть объявлен для общего использования любым другим модулем, в то время как другой обеспечивает доступ к внутренним интерфейсам, предназначенным только для использования выбранным набором тесно связанных модулей.
Например, с JNDI мы хотим, чтобы com.sun.jndi.toolkit.url отображался только для модулей cosnaming и kerberos, как указано в объявлении модуля.
view jdk.jndi.internal {
exports com.sun.jndi.toolkit.url.*;
exports sun.net.dns.*;
permits jdk.cosnaming;
permits jdk.kerberos;
}
Таким образом, мы имеем больше возможностей для определения границ модуля.
Я также слышал упоминание о optional
.
Я думаю, что в какой-то момент мы также собираемся получить 'ref' и' any'. –
@PaulBoddington, конечно, не в Java 9 для * любого * ключевого слова. Это Валгалла, т.е. 10 или более поздней. – kervin
* «Как будет выполняться обратная совместимость с * *, предположительно так же, как и всегда: вы должны скомпилировать затронутые файлы с более старой исходной версией – the8472