谁最终需要Java模块?

拼图问题为1000。我作为X想要JPMS模块。 如果不是平台开发人员,X是什么?

我的回答是X是人(减去平台开发人员,因为那是一个条件) 。 我们都需要模块系统具有更安全的代码,从而产生更可靠的系统,从而带来更好的业务绩效,带来更好的经济效益并带来人类幸福。 也许我得出的结论有点过头了,但重点是,无论是否意识到,行业内的每个人都需要模块系统。 你会得到的。 首先,我们应该从问题的先前答案开始。

Nicolai Parlog说: 每个类型不是全部公开的库开发人员。

非常真实 作为一个库开发人员,我想设计我的库,以便分离API。 我希望将公共接口与实现分开。 这就是我们程序员所说的“封装”。 封装起来太好了。 我们喜欢这样做! 我们这样做,因为它很有趣! 我们喜欢它!

关于第二个想法,尽管我们这样做是因为它是一种创建可靠的无错误软件的工具。

它帮助使用我的代码封装内部状态和实现的代码开发人员编写更好的代码。 这有点像抚养孩子。 作为父母,我不允许他们做某些事情。 多吃巧克力,熬夜等等。 即使他们暂时看不到它,这也是为了他们自己的利益。 当然,后来,当他们长大并自己成为父母时,他们将理解并做同样的事情。 对于库开发人员和使用程序员的库来说,没有什么不同,除了,也许程序员永远不会长大。

同样,作为图书馆开发人员,我要使用JPMS,以便于使用我的代码的开发人员。 我的库不会仅仅因为封装而好坏。 (附带说明:这会更好,但不是因为其中的错误数量减少了。)我可以很容易地暗示我作为图书馆开发人员的需求最少。 亲爱的程序员,谁在乎您是否使用我的库来射杀您的睾丸? 您有责任仅调用公共API,而不是一些经常修改的内部类和方法。 还是?

并不是的。 创建易于使用且难以出错的库也是我的责任。 这就是我们所说的可用性。 这是JPMS模块系统出现的地方。 没有JPMS,我可以记录哪些软件包是公共的,哪些是特定于实现的。 我与图书馆用户之间的约定是,他们将不使用图书馆的私有资源,因此,出于这种良好行为,我将使图书馆的公共部分保持稳定,以便他们无需在发行版本之间更改代码。 。 (顺便说一句,有没有人意识到这个名字,jPMS是多么的血腥?是什么?PMS,真的吗?更不用说看到与此有关的所有抽筋了:nomen est omen。这不是幸运的洗礼。)

让我们回到轨道上:为什么我们需要为此使用模块系统? 开发人员是纪律严明的人,他们不想伤害自己。 他们不应该,也不会使用库的内部代码。 从长远来看,这对他们不利,他们深知这一点。 从长远来看麻烦。 从长远来看,我们都死了。 在开发过程中,通常会在发布日期之前的几天,使用某个库的某些内部API似乎很有利可图。 以某种怪异的方式,这些内部调用正是您所需要的。 您知道不应该使用它们,并且有一个很好的,礼貌的解决方案,但这需要更多的时间来开发。 只是随着发布日期的临近,您没有时间遵循这种模式。 更不用说为“我能做到”而自豪,“我对这些工具的了解程度”,而不是为羞辱篡改图书馆的私有部分而感到自豪。

这就是Java Module System出现的地方。 您将无法执行快捷方式。 您会感叹过去Java面向全世界开放的美好时光,无论类加载器上有什么(更不用说FORTRAN编程,对还是对?),但是您将遵循规则,因为它否则将无法正常工作。

您认为使用库的内部组件并不容易受到虚荣的影响。 这是一个测试:您是否认识到我使用了“库的内部API”这一表达? 如果没有,那就感到羞耻,但不要承认。 没必要。 Java模块系统将有助于忘记不存在的事物,例如内部API。 废话。 API是公开的。 没有内部API之类的东西。 生成的代码将更好,更易于维护,不容易进行库升级,从而降低成本。

从长远来看,当我们全都死了时,我们的后代将创建更好的代码,并且具有模块级封装将是显而易见的事情,就像那时世界和平一样。

因此,我需要Java模块系统,您需要它,其他每个人都需要它来建立一个更好的世界并实现世界和平。

免责声明:本文的作者没有以英语为母语

翻译自: https://www.javacodegeeks.com/2017/05/needs-java-modules.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 删除带a的文件格式,linux基础命令练习题

2、如何通过命令行重启linux操作系统?shutdown -r now |reboot |init 63、如何在命令行中快速删除光标前的内容?ctrl uctrl k (删除光标之后的内容)5、设置/test/a.txt属主有读写执行权限,属组,有读写,其他账户无权限…

linux安全软件 腾讯,腾讯安全团队发现一存在24年的Linux 0day高危漏洞

腾讯安全团队近日向Linux社区提交了两个Linux X.25套接字漏洞,该漏洞可能造成权限提升,攻击者利用漏洞可能控制整个系统。漏洞风险等级为高,漏洞影响内核版本为2.1.16~5.9.8的Linux系统。目前这些漏洞尚未修复,漏洞细节…

在Salesforce中调用外部系统所提供的的Web Service

这里需要提供外部service所对应的WSDL文件(Salesforce只支持从本地上传),并且提供的WSDL文件有如下两点要求: 1):wsdl 文件只能有一个binding,Salesforce是不支持多个binding的 2)&a…

linux查询日志中页面返回状态码,[linux shell] Shell脚本实现apache日志中的状态码分析...

这篇文章主要介绍了Shell脚本实现apache日志中的状态码分析,本文先是介绍了按天切割日志的方法,然后给出了分析访问状态码的脚本,需要的朋友可以参考下一、首先将apache日志按天切割复制代码 代码如下:vi /etc/httpd/conf/httpd.confErrorLog "|rotatelogs /var/log/httpd…

e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (四) Q 反回调...

上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServer数据库的访问” 下面讲一下,对于在写Node.js自动化测试脚本过程中,的编写回调问题&#xff0…

基于比率的路由到旧版和现代应用程序–通过Spring Cloud的Netflix Zuul

从应用程序的旧版本迁移到应用程序的现代化版本时,一个非常普遍的要求是能够将用户缓慢迁移到新应用程序。 在本文中,我将介绍通过Spring Cloud使用对Netflix Zuul的支持编写的这种路由层。 在继续之前,我必须承认,此处演示的大多…

linux查找设备所在分片,Linux设备驱动统一模型解析

soc节点指定了<0x0 0xe0000000 0x00100000>;此属性值指定对于1024KB范围的地址空间,在物理0x0处寻址的子节点映射到物理0xe0000000的父地址。通过这种映射,串行设备节点可以通过0xe0004600地址的加载或存储、0x4600(在…

一个兼容所有浏览器的阻止事件冒泡方法

function stopBubble(event) { //阻止冒泡事件 //取消事件冒泡 var e arguments.callee.caller.arguments[0] || event; //若省略此句,下面的e改为event,IE运行可以,但是其他浏览器就不兼容 if (e && e.stopPropagation) { // this …

linux shell 脚本 supress,《linux Shell 脚本攻略》进阶学习(第一部分)

第二章命令之乐cat 不仅可以读取文件并且连接数据,它还能从标准输入中进行读取要从标准输入中读取,就要使用管道操作符echo Text through stdin | cat - file.txt。这里的-被作为来之stdin 文本的文件名称实例 在file.txt 中写入dfagfmirgjriogjrogijdfg…

xaml_XAML或JavaFx?

xaml这是使用XAML和JavaFx构建应用程序的快速,主观, 无权且非常不科学的比较。 比较是基于我与每个人合作的个人经验。 在XAML方面,这意味着WPF和Win8存储应用程序 。 在JavaFx方面,这意味着Windows 7应用程序。 JavaFX JavaFx被…

古代猪文

题意: 给定q ,n 求$q^{\sum\limits {d|n} C_{n}^{d} }mod 999911659$ 题解: 首先如果你直接算次方上的数的话会炸掉,因为欧拉定理我们可以得到 $q^{\sum\limits {d|n} C_{n}^{d} mod999911658}mod 999911659$ 因为mod的数是个合数…

linux gcc 7.3.0安装,升级gcc到7.3.0

#查看当前版本gcc --version # 先查看当前版本确认是否需要升级tar -zxvf gcc-7.3.0.tar.gzcd gcc-7.3.0#检测和安装相关依赖包,这个过程需要耐心等待,此步骤会将依赖包下载到gcc-7.3.0目录,如果因网络原因无法完成请自行使用wget下载。该步骤…

使用Envoy代理的微服务模式,第二部分:超时和重试

该博客是系列文章的一部分,该系列文章更深入地介绍了Envoy Proxy和Istio.io ,以及它如何实现更优雅的连接和管理微服务的方式。 跟随我christianposta ,紧跟这些博客文章的发布。 什么是Envoy代理 ,它如何工作? 如何…

矩阵快速幂总结

依然主要还是自用 首先矩阵一条性质的概述和证明 概述:对于一个临接矩阵$G$来说,它自乘$G^k$次方中$G[i][j]$含义为从i走到j走k步方案数. 证明:比较麻烦,我们设f[i]表示从1走到其他点方案数,那么根据矩阵递推优化,k次就是转移了k次,那么每次走一步,k次就是走了k步 最…

c语言有一个正整数加上100,c语言编程实现:一个整数,它加上100后是完全平方数,再加168又是完全平方数,求该数。...

满意答案问题:一整数,它加100后是完全平方数,再加168还是完全平方数,求该整数解题思路:设该数为x,它加100后是A,再加168为B。则因为A是完全平方数,所以A为正数,且Ay*y&am…

C语言计算分段函数pta,PTA浙大版《C语言程序设计(第3版)》题目集 练习2-11 计算分段函数[2] (10分)...

1.编程将一个字符串中所有空格替换为“%20”#define _CRT_SECURE_NO_WARNINGS#include #includeusing namespace std;const int maxd 20;//最大深度int m[1 << maxd];//最大结点个数为2的maxd次方-1//编程将字符串中的空格用%20代替…2021/5/21 3:32:25pssh是由python编写…

「PKUWC2018」Slay the Spire

国际惯例不放题干 扯淡 其实题目翻译过来是杀戮尖塔&#xff0c;某steam上的卡牌游戏&#xff0c;我也曾热衷刷榜 题解 首先题目中要求的期望是假期望,结合题目中所给的阶乘就可以看出这其实是从$2*n$张牌中选择$m$张牌使用,并且所有情况都取最大值时的和 首先排序贪心最大 再说…

java lambda使用_在Java 8 Lambda上使用Apache Commons Functor功能接口

java lambda使用Apache Commons Functor &#xff08;以下称为[functor]&#xff09;是一个Apache Commons组件&#xff0c;它提供功能性的编程API和已实现的几种模式&#xff08;访问者&#xff0c;生成器&#xff0c;聚合器等&#xff09;。 Java 8具有几个不错的新功能&…

基于svm图像分类C语言,基于SVM的图像分类算法与实现.PDF

, ( ) 计算机工程与应用40 ComputerEngineeringandApplications基于SVM的图像分类算法与实现张淑雅 赵一鸣 李均利, ,, ,ZHANGShu-yaZHAOYi-mingLIJun-li宁波大学 数字技术与应用软件研究所 浙江 宁波, 315211, , , ,InstituteofDSPandSoftwareTechniquesNingboUniversityNingb…

前端ui框架

http://frozenui.github.io/components.html#progress rozenUI是什么 Frozen UI是一个开源的简单易用&#xff0c;轻量快捷的移动端UI框架。基于手Q样式规范&#xff0c;选取最常用的组件&#xff0c; 做成手Q公用离线包减少请求&#xff0c;升级方式友好&#xff0c;文档完善…