Estou familiarizado com o Java Platform Module System.
O javadoc Module#addOpens
esboça um caso de uso que não consigo traduzir para o mundo real:
Este método pode ser usado para casos em que um módulo consumidor usa um opens qualificado para abrir um pacote para um módulo API, mas onde o acesso reflexivo aos membros de classes no módulo consumidor é delegado ao código em outro módulo. O código no módulo API pode usar este método para abrir o pacote no módulo consumidor para o outro módulo .
Confesso que sou muito estúpido para dar o salto desta descrição para o mundo real. Posso ver que isso tem a ver com expandir o acesso reflexivo profundo de alguma forma, mas não tenho certeza de qual é essa forma, particularmente dada a descrição do método em si:
Se este módulo [o " módulo consumidor "? talvez?] abriu um pacote para pelo menos o módulo chamador [o " módulo API "? talvez?], então atualize este módulo para abrir o pacote para o módulo fornecido [o " outro módulo "? talvez?].
Tenho uma vaga e quase certamente errada sensação de que isso está relacionado a, digamos, meu módulo (o "módulo do consumidor"?) abrindo um pacote para algo como Servlet (o "módulo da API"?), sem saber em tempo de execução que a implementação do Servlet em jogo é, na verdade, (digamos) Tomcat, então, se meu código desejar, ele (eu acho?) pode chamar esse método e, assim, de alguma forma, permitir que o Tomcat (o "outro" módulo?) faça coisas reflexivas sem saber que é, de fato, o Tomcat (e não, digamos, o Jetty) fazendo essas coisas reflexivas, e sem precisar ter um extra, opens com.foo.bar to Tomcat
bem module-info
como opens com.foo.bar to Servlet
.
(Também não tenho certeza de onde a "delegação" deveria estar acontecendo; o Servlet não pode "delegar" nada ao Tomcat neste cenário.)
Mas, dadas Lookup
as restrições de sensibilidade do site de chamada, não tenho certeza de como isso deve funcionar, ou onde e quando no meu código neste cenário eu devo fazer esse tipo de chamada, ou por que, se eu já adicionei uma opens
declaração, agora também devo fazer algo programático. Eu entendo o objetivo motivador da integridade e que a permissão deve ser concedida para acesso reflexivo e que isso deve , de alguma forma, tornar as coisas mais fáceis, mas não consigo chegar lá concretamente.
Em resumo: existe realmente um caso de uso concreto para esse recurso? Se sim, qual é? Como ele funciona?