ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

需求和需要Java 9中的传递语句有什么区别?

2019-09-28 10:02:56  阅读:235  来源: 互联网

标签:java-module java requires java-9 module-info


需求和需要模块声明中的传递模块语句有什么区别?
例如:

module foo {
    requires java.base;
    requires transitive java.compiler;
}

解决方法:

可读性回顾

如果模块棒需要模块饮料,那么模块系统……

>强制饮酒(称为可靠配置)
>允许酒吧阅读饮料(称为readability)
>允许bar中的代码访问drink中导出包中的公共类(称为accessibility)

如果酒吧需要传递饮料,则完全相同 – 饮料必须存在,可以阅读和访问.事实上,对于酒吧和饮料,传递关键字不会改变任何东西.

隐含的可读性

依赖于条形的模块是受传递影响的模块:任何读取条形图的模块也可以读取饮料.换句话说,暗示了饮料的可读性(这就是为什么这被称为implied readability).结果是客户可以访问饮料类型.

因此,如果酒吧需要传递饮料而客户需要酒吧,那么即使客户没有明确依赖饮料,客户也可以阅读饮料.

用例

但为什么?想象一下,你有一个模块,其公共API接受或返回另一个模块的类型.假设bar模块公开返回Drink的实例,这是来自drink模块的接口:

// in module _bar_
public class Bar {

    // `Drink` comes from the module _drink_,
    // which _bar_ requires
    public Drink buyDrink() { /* ... */ }

}

在这个例子中,酒吧使用常规的饮料需求.现在说,客户依赖于bar,所以它的所有代码都可以调用Bar :: buyDrink.但是当它发生时会发生什么?

模块系统抱怨客户不读饮料,因此无法访问饮料.为了解决这个问题,顾客也必须依赖饮料.真是个琐事!你不能马上使用的酒吧是多么无用?

customer requires bar requires drink - but how does customer read drink?

出于这个原因,引入了隐含的可读性:使模块在其自己的公共API中使用另一个模块的类型立即可用,而无需调用者追捕并需要所有涉及的模块.

因此,如果酒吧需要传递饮料,顾客可以开始购买饮料而不需要饮料 – 需要酒吧就足够了.正如它应该.

标签:java-module,java,requires,java-9,module-info
来源: https://codeday.me/bug/20190928/1826960.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有