Можно ли использовать SharedSecrets в модулях Java?

Данный:

  • Модули A и B, где B импортирует A.
  • Модуль A экспортирует external.class1. Он определяет, но не экспортирует external.class1.secretProvider, internal.SharedSecrets и internal.class2 (подробнее об этом ниже).
  • Модуль A использует механизм SharedSecrets для предоставления external.class1 доступа к закрытым методам в internal.class2 с помощью external.class1.secretProvider.

Я хочу предоставить external.class3 (определено в модуле B) доступ к закрытым методам в internal.class2, но поскольку internal.SharedSecrets и external.class1.secretProvider не экспортируются A, у меня нет возможности сделать это.

Есть ли способ для B получить доступ к секретам A, не выставляя их на всеобщее обозрение?


person Gili    schedule 06.12.2018    source источник
comment
Почему бы не использовать квалифицированный экспорт? exports external.class1.secretProvider to B.. Если я правильно понял вопрос, это то, что вы ищете.   -  person Naman    schedule 06.12.2018


Ответы (1)


Есть ли способ для B получить доступ к секретам A, не экспортируя их на всеобщее обозрение?

Если я правильно понял вопрос, вы можете использовать квалифицированный экспорт, чтобы убедиться, что вы экспортируете эти пакеты только в определенный (список) модуль. Вы можете сделать это как:

module A {
    exports external.class1.secretProvider to B;
    exports internal.SharedSecrets to B;
    // ... rest of your declarations
}
person Naman    schedule 06.12.2018
comment
Имеет смысл для меня. Я не рассматривал этот вариант, потому что большинство руководств, которые я нашел, не охватывают квалифицированный экспорт. В итоге я нашел oracle.com/corporate/features/understanding- java-9-modules.html который делает. Спасибо. - person Gili; 06.12.2018