Mor*_*hai 15 java java-platform-module-system java-9 java-module module-info
在Java 9的模块声明中有2个结构:
exports com.foo;
Run Code Online (Sandbox Code Playgroud)
和
opens com.foo;
Run Code Online (Sandbox Code Playgroud)
凡exports赠款编译时访问,同时opens允许运行时访问,如反射和资源.
opens有一个宽容exports,你可以将整个模块定义为open,结果与显式打开每个包相同:
open module com.mod {
Run Code Online (Sandbox Code Playgroud)
但是没有相似的结构
exported module com.mod {
Run Code Online (Sandbox Code Playgroud)
我的问题:为什么会这样; 有什么决定允许一次打开整个模块而不是出口?
Nic*_*lai 16
模块的导出定义了它的API,应该有意设计并保持稳定."导出的模块"可能通过添加,删除或重命名包而轻易地且无意中更改其API,这将违背稳定性目标.(这与没有"通配符导出"的原因基本相同exports foo.bar.*).
另一方面,打开包不会真正定义模块的API.当然,代码可以依赖于只能通过反射访问的功能,但Java社区通常将反射视为用于访问内部的"hack".
它更广泛(也更有益)的用途是访问工件以为其提供服务(XML/JSON序列化,持久性,依赖注入......).在这种情况下,反映在模块上的代码不依赖于它,因此不会因移动内容而破坏.因此没有理由保持打开的软件包稳定,这使得像开放模块这样的免费方法变得可行.
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |