#java #information-hiding
#java #сокрытие информации
Вопрос:
Я работаю над java-библиотекой, и из-за сокрытия информации я был вынужден переместить все мои java-файлы в один пакет, чтобы пометить некоторые из них как закрытые.
Есть ли какой-нибудь способ организовать эти java-файлы в «пакеты», не нарушая принципа сокрытия информации?
Комментарии:
1. Если все ваши файлы находятся в одном пакете и все они являются частными, в этом действительно нет смысла, поскольку это было бы так же, как если бы все они были общедоступными в первую очередь.
2. Не все пакеты являются частными, но некоторые. Проблема в том, что эти несколько закрытых для пакетов классов требуются во всей библиотеке, но точно так же слишком опасны, чтобы быть общедоступными. Не было другого варианта поместить их в один пакет.
Ответ №1:
Для этого и предназначены модули Java 9. Они вводят дополнительный уровень инкапсуляции.
private
package-private
module-private
public
module-private
являются общедоступными членами в пакетах, которые не экспортируются.
В следующем примере класс PublicClass
находится в пакете com.library
. В том же пакете есть module-info.java
файл, который объявляет модуль Java и экспортирует пакеты, которые являются общедоступным API. Все классы в пакетах, которые не экспортируются, не будут видны из модулей, которые зависят от этого.
package com.library;
public class PublicClass {}
package com.library.internal;
public class InternalClass {}
module com.library {
exports com.library;
}
module com.app {
requires com.library;
}
package com.app;
class App {
void run() {
new InternalClass(); // compile-time error
new PublicClass(); // success
}
}