音乐网站建设目标,互联网商城有限公司,企业名录黄页大全,建立自己的摄影网站Java 9 是在几周前发布的。 查看发行说明 #xff0c;其中包含许多有趣的功能。 不过#xff0c;我觉得并非一切都是不如甲骨文和Java行家似乎图片吧 。 我看到了Java世界中的三个趋势#xff0c;分别是好#xff0c;坏和丑陋。 让我们从好的开始。 Birdman#xff08;20… Java 9 是在几周前发布的。 查看发行说明 其中包含许多有趣的功能。 不过我觉得并非一切都是不如甲骨文和Java行家似乎图片吧 。 我看到了Java世界中的三个趋势分别是好坏和丑陋。 让我们从好的开始。 Birdman2014作者Alejandro G.Iñárritu 该平台 第一个趋势是对编译Java打包JAR和运行字节码的平台的明显改进。 每个Java新发行版肯定会变得更好。 以下是Java 9所做的改进毫无疑问它们非常有用 JSR 376 模块系统又名拼图 JEP 222 jshell JEP 238 多发行版JAR JEP 282 jlink JEP 158 统一日志记录 该平台显然正在变得更加成熟。 这是一个好趋势。 JDK 自Java 6以来我观察到的第二个趋势表明JDK本质上是由Oracle设计开发和维护的类和接口的集合每发布一个新版本JDK就会变得越来越大。 在Java 9中除了其他功能外它们还添加和扩展了以下内容 JEP 221 224 225 261 的Javadoc处理扩展 JEP 268 XML目录新 JEP 262 TIFF映像I / O新 JEP 251 多分辨率图像新 JEP 110 HTTP 2.0客户端新 JEP 236 Nashorn解析器扩展 当然某些功能必须在JDK本身中实现例如Unicode支持 JEP 267 特定于平台的桌面功能 JEP 272 Spin-Wait提示 JEP 285 紧凑字符串 JEP 254 和流程API。 JEP 102 。 它们的实现取决于基础平台并且必须与JVM一起提供。 但是在JDK中HTTP 2.0客户端与JAX-RS JPA JAX-WS JDBC以及许多其他我认为应该远离Oracle的事物在做什么 它们不是特定于平台的可以由开源社区以更好的方式将它们设计为独立的软件包。 我认为将它们汇总在一个巨型保护伞品牌下是一个错误。 我认为大公司只是在扼杀软件市场而没有使它变得更好这是因为它们暴露于其财务和政治动机。 这正是JDK发生的事情。 由于甲骨文的垄断它缺乏增长的灵活性和动态性。 换句话说我们对Oracle及其大朋友认为正确的事情一无所知。 因此使JDK更大是一个坏趋势。 相反我相信Oracle只会从缩小规模中受益将所有非特定于平台的内容委派给开源社区以某种方式支持程序员并促进市场上开放有效的标准化流程。 语言 Java由James Gosling在1995年的Sun Microsystems中开发是一种面向对象的语言。 关于这种面向对象的主张引起了很多关注 我也不确定Java是否比过程更面向对象。 但是它是官方的面向对象的。 从Java的第一个版本开始Java就从C / C 继承了许多程序特性包括静态方法 NULL 实现继承等。据我所知它不是一种完美的面向对象语言也不会成为一种语言。它。 关键思想是创建可以一次编写并可以在任何地方运行的东西。 但是该语言也很重要而不仅仅是JVM。 简单又性感。 Java 5在2004年向前迈出了重要的一步并通过添加泛型 for-each循环 varargs和静态导入对语言进行了改进。 但是引入了注释和枚举这有助于该语言从对象范式转移到完全不同的过程。 Java 7在2011年增加了try-with-resource 这是一个很好的举措与OOP范例保持一致。 Java 8在2014年添加了lambda表达式 这是一个很棒的功能但与OOP绝对无关。 Lambda和Streams API将Java变成了对象过程和功能范式的混合体。 默认方法也已添加到接口从而将类型转换为代码库。 输入库 如果您问我它甚至比实现继承更糟糕。 现在Java 9对接口进行了下一个“改进”使它们可以使用私有方法。 类型中的私有静态方法 你相信吗 下一步将是什么 我猜是Java 10中的属性。 另外让我们看一下对JDK中的某些核心类所做的操作以了解该语言的发展方向。 仅举两个例子。 收集的工厂方法 JEP 269 。 而不是引入新的构造函数并允许我们这样做 ListInteger list new ArrayList( 1 , 2 , 3 ); …在Java 9中他们创建了更多的静态方法并使我们这样做 ListInteger list List.of( 1 , 2 , 3 ); “更少的构造函数更多的静态方法” 似乎是那些介绍此JEP的人的哲学。 不用说这完全违背了面向对象编程的精神。 无论Joshua Bloch 说什么都必须由构造函数创建对象而不是静态方法。 静态方法使我们看不到操作符new用法的时刻这就是代码难以维护的原因-我们只是不知道确切地实例化了哪个类以及其ctor的实际参数是什么。 顺便说一下使用Cactoos您可以正确地做到这一点 ListInteger list new ListOf( 1 , 2 , 3 ); 这是OOP。 InputStream新方法 。 在已经过大的类InputStream中添加了三个新方法 transferTo() readNBytes()和readAllBytes() 。 现在当我们想将输入流复制到输出流时我们应该这样做 input.transferTo(output); 这是年轻的OOP程序员犯的最典型的错误之一他们使接口变大。 只是因为他们需要更多功能。 我猜想接口隔离原则是著名的SOLID的一部分并且已经使用了很多年。 Oracle您怎么了 下一步将是什么 在Java 10中我们还将具有saveToFile()和printToConsole()吗 怎么样emailToAFriend() 这就是您将如何使用commons-io的IOUtils实用程序类执行以下操作 IOUtils.copy(input, output); 这不是完美的 但是更好。 最面向对象的方法是使用对象而不是实用程序类和静态方法。 这就是Cactoos中的工作方式 new LengthOf( new TeeInput(input, output)).length(); 这是OOP。 我认为Java越来越难看 这是一种趋势。 这是否意味着该退出了 没有 无论您多么丑陋我们将永远爱您Java 您可能还会发现这些相关的帖子很有趣 每个私有静态方法都是新类的候选人 灵活性等同于低质量 ; 为什么InputStream设计错误 ; 继承是一种代码重用的程序技术 ; 方法调用之间的时间耦合 ; 翻译自: https://www.javacodegeeks.com/2017/10/java-9-good-bad-private-interface-methods.html