我们大多数使用Java进行开发的人通常都热衷于JDK 8附带的功能和改进。 但是,最近有几篇文章指出了某些功能可能会被滥用和滥用,并可能在将来导致其他问题。 这些功能使我想起了J2SE 5中引入的自动装箱功能,虽然有其有用的情况,但是如果未正确理解和应用,也会导致问题。 在这篇文章中,我引用了其他人关于这些可疑功能的文章。 请注意,本文并非与任何发行版相关的“正常” 已知问题 。

Lambda表达式似乎是JDK 8的最大新功能 ,但Tal Weiss撰写了一篇名为Java 8中Lambda表达式的黑暗面的文章。 在那篇文章中,Weiss写到了lambda表达式和Nashorn JavaScript引擎的“阴暗面”(他认为这是JDK 8的第二大功能)。 他谈到“代码与运行时之间的距离”,并指出“我们为更短,更简洁的代码,更复杂的调试和更长的合成调用栈付出了代价”。

在Java 8的“爱与恨”中 , Andrew C. Oliver和Michael Brush提供了有关JDK 8的一些主要新功能的很好的介绍。他们认为接口上的默认方法 “允许多种继承”,并且“可能” [成为Java 8中大多数人关心的细节。“ 他在评估时总结了这篇文章,“将危险的功能是功能接口。 如果使用不当,可能会引起很多头痛。”

Peter Verhas在Java 8默认方法一文中对接口上的默认方法的潜在问题进行了详细分析:什么可以做和不能做? 以及如何不使用Java 8默认方法 。 他在一篇文章中指出:“向接口添加默认方法可能会使某些类无法使用。” 在另一篇文章中,他补充说:“默认方法是技术错误”,并引用以下事实:默认方法已添加到Java接口中,以支持现有实现的向后兼容性,而这些方法需要添加到接口中以支持新的JDK 8特征。

卢卡斯·埃德 ( Lukas Eder ) 在Java 8的黑暗面中表达了对默认方法的不同关注:无法使默认方法最终或同步,并且无法引入“默认”关键字。 这篇文章中指出的另一个有趣的“ caveat”是lambda表达式对重载的影响。

Tal Weiss的另一篇文章, 《 Java 8中的新并行API》:The Glitz and Glamor ,探讨了魏斯在测量“新Java 8并行操作API”在负载下的性能时观察到的一些问题。 Weiss观察到“在已经是多线程环境的环境中添加线程并不能帮助您”,并提醒我们,“尽管这些都是非常强大且易于使用的API,但它们并不是灵丹妙药 。 我们仍然需要对何时使用它们做出判断。”

Lukas Krecan警告说,在使用Java 8并行流之前要三思,然后写道:“问题是所有并行流都使用公共的fork-join线程池 ,如果提交了长时间运行的任务,则会有效地阻塞池中的所有线程。” 为了解决这个问题,Krecan建议“(确保)提交到公共fork-join池的所有任务都不会卡住,并会在合理的时间内完成”或“不要使用并行流并等到Oracle允许我们指定用于并行流的线程池。”

Edwin Dalorzo的文章《 Java 8中为什么会有接口污染》着眼于类型擦除 , 检查的异常以及缺少值类型 ( JEP 169 )如何导致JDK 8中的设计决策“污染了” Java接口。 这篇文章将Brian Goetz关于JDK 8设计决策的引文与作者自己的评论混合在一起,以指出“对于黑暗面的存在有很好的解释”。

当然,新发布的JDK 8和基于Java的工具之间存在问题。 例如,在《 Hello Java 8》(以及如何使GlassFish变得无语……)一文中 , Cay Horstmann记录了GlassFish 4在“将WAR与错误的Java版本一起编译时”,没有编写任何堆栈跟踪信息。

尽管引用的帖子指出了与JDK 8最令人期待的功能有关的合理问题,例如lambda表达式,流,接口默认方法和Nashorn JavaScript引擎,但我仍然对使用JDK开发Java的勇敢新世界感到兴奋8 。 这篇文章中突出显示的帖子是提醒您谨慎谨慎地使用这些新功能,以便我们在享受它们带来的优势的同时,尽可能地减少因不明智使用而带来的新危险和成本。

翻译自: https://www.javacodegeeks.com/2014/04/dubious-aspects-of-features-of-jdk-8.html

JDK 8功能的可疑方面相关推荐

  1. jdk 1.8 jdk8_JDK 8功能的可疑方面

    jdk 1.8 jdk8 我们大多数使用Java进行开发的人通常都热衷于JDK 8附带的功能和改进. 但是,最近有几篇文章指出了某些功能可能会被滥用和滥用,并可能在将来导致一些其他问题. 这些功能使我 ...

  2. 欢迎使用Java 8之前要重温的10个JDK 7功能

    Java 8发布已经快一个月了,我敢肯定,大家都在探索JDK 8的新功能.但是,在您完全研究Java 8之前,是时候重新审视Java 7上引入的一些很棒的功能了.记住,Java 6并没有什么功能,它只 ...

  3. Java 14:JDK 14进入GA时的所有新功能

    是的,六个月过去了这么快,现在到了,Java 14的发布即将到来. 我们一直在跟踪新JDK在过去半年中的进展,您可以在此处找到摘要的所有功能. 但是,如果您想直接进入,可以在此处找到JDK 14二进制 ...

  4. JDK 19:针对Java 19的功能

    虚拟线程.switch表达式的模式匹配.vector API和Linux/RISC-V端口将用于Java 19,这是标准Java的非LTS版本,将于9月发布. 定于今年9月发布的Java Develo ...

  5. JDK 10 的 109 项新特性

    来源:开源中国, www.oschina.net/translate/109-new-features-in-jdk-10 虽然感觉 JDK9 发布才仅仅几周的时间,然而,随着新的 OpenJDK 的 ...

  6. 高仿真 JDK Proxy手写实现

    不仅知其然,还得知其所以然.既然 JDK Proxy功能如此强大,那么它是如何实现的呢?我们现在来探究一下原理,并模仿 JDK Proxy自己动手写一个属于自己的动态代理.我们都知道 JDK Prox ...

  7. 给Arm生态添把火,腾讯Kona JDK Arm架构优化实践

    前言 Arm架构以其兼具性能与功耗的特点,在智能终端以及嵌入式领域得到了广泛的使用,不断扩大其影响力.而在PC端以及数据中心,之前往往是x86架构在其中发挥着主要的作用.最近,随着人工智能.云计算等技 ...

  8. IDEA 正式版终于支持中文版和 JDK 直接下载了(太方便了)附介绍视频

    IDEA 2020.1 经过了漫长的打磨终于发布正式版了,而这次的版本不止直接支持 Java 14,还带来了两个重量级的功能,官方中文版支持和 JDK 直接下载. 在之前的开发中,当我们需要下载 JD ...

  9. IDEA 终于支持中文版和 JDK 直接下载了(太方便了)附新版介绍视频

    这是我的第 48 篇原创文章. IDEA 2020.1 经过了漫长的打磨终于发布正式版了,而这次的版本不止直接支持 Java 14,还带来了两个重量级的功能:官方中文版支持和 JDK 直接下载. 在之 ...

最新文章

  1. Neverout:一款新的沉浸式益智游戏
  2. eclipse定制化配置调优、初始化配置指南、可以解决启动慢等问题
  3. springboot urlresource_Spring Boot上传文件+部署到Tomcat
  4. 拟态个人主页UI源码开源
  5. script中的event和for的意思
  6. 【c++】知识点积累
  7. 知识服务才是为用户创造价值的体现
  8. 微信公众测试号授权登录 学习笔记
  9. 你离大牛就差这10家国内知名的慕课网站。
  10. 片上总线Wishbone 学习—— 转载请注明出处:http://blog.csdn.net/ce123
  11. 华为交换机导入配置_华为交换机通用配置方式方法
  12. ble l2cap 工作过程_从车联网安全到BLE安全(二)
  13. 支持iframe的div分隔线插件
  14. js如何让方法在延迟两秒后执行
  15. ubuntu22.04开机后黑屏的解决方法
  16. 如何从零自学成为前端工程师,怎么学习?怎么选老师?
  17. 3个行业的裂变营销案例,实体店如何低成本拓客,让客户自动裂变
  18. 为什么不能实现精确扫频?
  19. 计算机三级哪个实用点,考计算机三级哪个简单?哪个会实用点?
  20. 使用python+emovebg制作证件照

热门文章

  1. 小米路由器青春版装linux,比较费心的折腾 篇二:小米路由器青春版折腾负载均衡...
  2. stream进行分组统计
  3. like左匹配索引失效_Mysql索引失效的情况
  4. java泛型程序设计——约束与局限性
  5. java登录界面命令_Java命令行界面(第10部分):picocli
  6. java登录界面命令_Java命令行界面(第5部分):JewelCli
  7. javafx 使用_何时使用JavaFX代替HTML
  8. java面包屑实现_在Java中实现过滤器和面包店锁
  9. gradle 构建应用流程_使用Gradle构建和应用AST转换
  10. 为什么在生产中进行硒自动化测试对于您的下一个版本至关重要?