JDK 8功能的可疑方面

我们大多数使用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

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

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

相关文章

Xshell 基本使用方式 (1) -- 使用Xshell 连接 VMware下的linux系统

在VMware的虚拟机设置下的网络适配器设置成桥接模式,点击确定。 在终端中输入ifconfig命令查看IP 打开Xshell 新建会话 输入刚刚获取的IP地址,我的是219.219.198.225 如果点击右侧的用户身份验证 输入你的linux登录用户名以及密码 点击连接 可以看到已经…

linux 串口 qt,Linux-QT4.7 实现串口通信

在qt5版本以下,想要实现串口通信需要两个集成类,posix_qextserialport 和 qextserialbase,需要的可以移步到 下载点。在posix_qextserialport这个类中关于串口设置的定义很详细,常用的写法一般是Posix_QextSerialPort * myCom;myC…

JS实现2048

2048这个游戏是通过对二维数组的操作来实现的&#xff0c;其算法核心如下&#xff1a; &#xff08;以一行左移为例&#xff09; c从0开始&#xff0c;遍历当前行中的元素&#xff0c;到<CN-1&#xff08;CN是一个常量&#xff0c;表示的是游戏格子的列数&#xff09;结束&a…

django01

Django的下载与基本命令: 1、下载Django&#xff1a; pip3 install django 2、创建一个django project django-admin.py startproject mysite manage.py ----- Django项目里面的工具&#xff0c;通过它可以调用django shell和数据库等。    settings.py ---- 包含了项目的…

Maven和Java多版本模块

介绍 通常&#xff0c;项目具有最低Java版本要求&#xff0c;并且适用于其所有模块。 但是每条规则都有其例外&#xff0c;最近我偶然发现了以下问题。 我的一个开源项目对大多数模块要求使用Java 1.6&#xff0c;除了一个要求1.7版本的项目。 当集成具有与您自己的项目不同的…

鼠标样式设置

<span style"cursor:auto">浏览器设置的光标</span><br /> <span style"cursor:default">默认鼠标箭头</span> <span style"cursor:pointer">一只手的形状</span> <span style"cursor:text&…

如何在linux环境下安装kvm,如何在Linux发行版上安装和配置KVM和Open vSwitch?

在如今多租户模式的数据中心环境下&#xff0c;虚拟化技术正从传统的基于虚拟机管理程序的服务器虚拟化&#xff0c;扩展到网络虚拟化。在这种环境下&#xff0c;基于软件的虚拟交换机通常连同虚拟机管理程序一起部署在服务器上&#xff0c;串联起了不同虚拟机之间传送的流量。…

hanlp中的N最短路径分词

N-最短路径 是中科院分词工具NLPIR进行分词用到的一个重要算法&#xff0c;张华平、刘群老师在论文《基于N-最短路径方法的中文词语粗分模型》中做了比较详细的介绍。该算法算法基本思想很简单&#xff0c;就是给定一待处理字串&#xff0c;根据词典&#xff0c;找出词典中所有…

怎么在ReactNative里面使用Typescript

今天来搞一搞怎么搭建一个可以使用Typescript的ReactNative环境好吧&#xff0c;一句废话不多说&#xff0c;直接开始好吧 1.全局安装create-react-native-app yarn global add create-react-native-app 2.create-react-native-app 你的项目名称 例如&#xff1a;create-r…

如何不使用Java 8默认方法

警告&#xff1a;一旦阅读&#xff0c;您将无法看不到它 我在上一篇博客文章中讨论了默认方法的多重继承&#xff0c;以及它们在编译和运行时的行为。 这周&#xff0c;我将研究如何使用默认方法进行真正的继承&#xff0c;实际上&#xff0c;默认方法并不是为这种方法而设计的…

linux mint 18.3 内核,Linux Mint 18.3 “Sylvia” Cinnamon正式发布上线

Linux Mint创建者Clement Lefebvre今天宣布Linux Mint 18.3 “"Sylvia” Cinnamon和MATE Beta版本正式发布和上线。Linux Mint 18.3基于Ubuntu 16.04 LTS(Xenial Xerus)&#xff0c;搭载Linux Kernel 4.10内核&#xff0c;将持续到2021年获得更新和安全补丁。  Linux Mi…

浏览器兼容问题及解决方案

1.图片间隙 A)div中的图片间隙&#xff08;该bug出现在IE6以及更低版本当中&#xff09; 描述&#xff1a;在div中插入图片时&#xff0c;图片会将div下方撑大三像素 hack1&#xff1a;将</div>和<img>写在一行上 hack2&#xff1a;将<img>转化为块状元素&am…

Java 8星期五:Java 8的阴暗面

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

SQL,HQL,CQL,JPQL了解

SQL&#xff08;Structured Query Language&#xff09; 是关系数据库查询语言。from后面跟的是“表名”&#xff0c;where后用“表中字段”做条件 HQL&#xff08;Hibernate Query Language&#xff09; 是面向对象的查询&#xff0c;from后面跟的是“表名”&#xff0c;where…

报错集锦

1.在node后端使用express中的multer中间件来实现文件上传时报错 node multer 报错Unexpected field 1 var expressrequire(express); 2 3 var routerexpress.Router(); 4 5 var uploadrequire(...) router.post(/upload,upload.single(fileid)); 原因&&解决&#xff…

shipyard-----------docker容器的可视化管理

shipyard是什么&#xff0c;由题目就可知&#xff0c;是一个对docker进行管理的可视化界面 照此步骤就能完成对shipyard搭建 <ip-of-host>内容要修改成你的docker0的IP地址&#xff0c;不知道的话就ifconfig就好了 如果搭建不成功则是防火墙未开放4001端口&#xff1a;su…

virtualbox怎么共享文件夹 linux,Virtualbox中Ubuntu设置共享文件夹

1、安装增强功能包(Guest Additions)VirtualBox中&#xff0c;选择”设备” -> “安装增强功能”。命令行输入&#xff1a;$ cd /media/VBoxGuestAdditions_4.3.8_RC1$ sudo ./VboxLinuxAdditions.run开始安装工具包&#xff0c;安装完毕后重启虚拟机。2、配置共享文件夹Vir…

Eclipse对Java(TM)8的官方支持

Java开发工具&#xff08;JDT&#xff09;项目的项目负责人Dani Megert今天早些时候宣布了此声明 &#xff1a; Eclipse顶级项目非常自豪地宣布正式支持Java™8。从I20140318-0830开始&#xff0c;所有的Luna&#xff08;4.4&#xff09;构建都包含Eclipse对Java™8的支持。对…

Quartz.net使用笔记

一、需求场景&#xff1a;每天固定时间执行某个行为/动作。 一开始想用定时器&#xff0c;后来无意间发现了这个插件&#xff0c;感觉功能太强大了&#xff0c;完美解决了我的问题。 二、下载地址&#xff1a;https://www.quartz-scheduler.net/ 也可以在项目中直接使用nugut进…

JS里面的懒加载(lazyload)

懒加载技术(简称lazyload)并不是新技术, 它是js程序员对网页性能优化的一种方案.lazyload的核心是按需加载 涉及到图片&#xff0c;falsh资源 , iframe, 网页编辑器(类似FCK)等占用较大带宽&#xff0c;且这些模块暂且不在浏览器可视区内,因此可以使用lazyload在适当的时候加载…