Java 8的8个新功能

注意:确保还检查了我们的详细教程Java 8 Features – ULTIMATE Guide 。

Jdk 1.8(又名Java 8)今天发布,这意味着它的通用发布版本已经公开发售,开发人员可以从早期发布版本切换到经过测试的版本以供生产使用。 但是,对于繁忙的Java开发人员来说,这对您意味着什么? 好吧,我总结了一些要标记此版本的要点:

1.Lamda表达式

我从lambda表达式开始,因为它可能是Java 5中的Generics / Annotations之后的语言中最受欢迎的功能。

语法如下:

(argtype arg...) -> { return some expression.. probably using these arguments }

它的作用是减少明显的代码,例如在匿名内部类中。 (摇摆动作处理程序变得很性感,是的!)

因此,线程可以更改为:

Runnable oldRunner = new Runnable(){public void run(){System.out.println("I am running");}
};
Runnable java8Runner = () ->{System.out.println("I am running");
};

与Scala相似,在Lambda中也可以进行类型推断。 考虑以下可用示例:

Comparator c = (a, b) -> Integer.compare(a.length(), b.length());

在此,当实现compare方法时,可以推断出a,b的类型(在这种情况下为Comparator接口的String)。

用于将块与参数分开的符号->与Scala中已经使用的=>非常相似,如果您擅长使用该符号,则没有太多理由进行切换,因为您会感觉到lambda在Java中的实现方式不充分(和冗长),但是对于一个优秀的'ol Java程序员来说,这是要走的路。

2.通用类型的更改和改进

从Lambdas获得线索后,通用集合还可以推断要使用的数据类型。 例如,使用通用集合的方法无需指定通用类型。 因此,以下方法

SomeClass.method();

可以简单地忽略类型信息而调用:

SomeClass.method();

可以通过方法签名来推断类型,这对于嵌套调用(如

myCollection.sort().removeUseless().beautify();

3.流集合类型(

流是一个迭代器,它允许对其调用的集合进行单次运行。 与Lambdas一起,这是另一个值得关注的功能。 您可以使用流对集合执行诸如Filer或map / reduce的功能性操作,这些集合可以使用Stream对象作为单个元素进行流式处理。 流可以根据需要顺序或并行运行。 并行模式利用fork / join框架,可以利用多个内核的功能。

例:

List guys = list.getStream.collect(Collectors.toList())

也可以并行实现为

List guys = list.getStream.parallel().collect(Collectors.toList()

将集合减少为单个项目的另一个不错的示例是调用reduce algorithem。

int sum = numberList.stream().reduce(0, (x, y) -> x+y);

要么,

int sum = numberList.stream().reduce(0, Integer::sum);

4.功能接口(

这些接口包含一些不需要实现的默认方法,可以直接从该接口运行。 这对现有代码有帮助-更改接口不必使实现它的所有类都实现新方法。 这类似于Scala中的Traits,功能接口将与lambda兼容。

5. Nashorn –

这是使我们能够在JVM上运行javascript的javascript引擎。 它类似于运行Node.js的chrome提供的V8引擎。 它与Node.js应用程序兼容,同时还允许服务器上运行的javascript代码调用实际的Java库。 至少可以说这令人兴奋,因为它直接将Node.js的可伸缩性和异步特性与安全且广泛的服务器端Java中间件结合在一起。

6.日期/时间更改(

http://download.java.net/jdk8/docs/api/java/time/package-summary.html

日期/时间API移至java.time包,并遵循Joda时间格式。 另一个好处是,大多数类都是线程安全的并且是不可变的。

7.类型注释

现在,注释可用于装饰通用类型本身。

例如:

List<@Nullable String>

这并非总是希望的,但在某些情况下可以证明是有用的。 除了装饰泛型类型外,它还可以用于构造函数和强制转换。

new @NonEmpty @Readonly List(myNonEmptyStringSet)
new @Interned MyObject()myString = (@NonNull String) myObject;

甚至可以注释数组对象:

@NotNull String[] arr;

包含RuntimeVisibleTypeAnnotations和RuntimeInvisibleTypeAnnotations属性,这些属性使.class文件保存注释信息。

8.Other –(很高兴)更改

在TypeName,GenericString等的支持下,反射api有所增加。

String.join()方法是一个受欢迎的补充,因为创建了许多自行创建的实用程序类。 所以,下面的例子

String abc= String.join(" ", "Java", "8");

将被评估为“ Java 8”。

在“集合”包中,对Comparator接口进行了改进,并添加了诸如反转,比较和随后的COmparing之类的方法,可轻松自定义多个字段的比较。 诸如Concurrency和NIO之类的其他库也已更新,但值得关注,并且与api中的更改保持一致。

总体而言,Java8经过深思熟虑,并且正在使主流Java简洁明了,并选择了Scala / Clojure的某些出色部分来改进其语法并解决人们所寻求的功能。

翻译自: https://www.javacodegeeks.com/2014/03/8-new-features-for-java-8.html

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

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

相关文章

第四章 生命周期函数--35 vue-resource发起get、post、jsonp请求

vue-resource 官网 https://github.com/pagekit/vue-resource 1 <!DOCTYPE html>2 <html lang"en">3 4 <head>5 <meta charset"utf-8">6 <meta name"viewport" content"widthdevice-width,initial-sc…

html边框为框,HTML 为元素设置边框

属性&#xff1a;border&#xff0c;可以为元素这是上右下左四条边框(顺序很重要)取值有三个&#xff1a;1.border-width:边框宽度&#xff0c;默认3px&#xff0c;可以手动设置&#xff0c;取像素值2.border-style:边框样式&#xff0c;必填项。可取&#xff1a; solid (实线边…

nginx配置返回文本或json

有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串&#xff0c;如果逻辑非常简单或者干脆是固定的字符串&#xff0c;那么可以使用nginx快速实现&#xff0c;这样就不用编写程序响应请求了&#xff0c;可以减少服务器资源占用并且响应性能非常快 如果要返回固…

Enterprise Library Step By Step系列(十一):异常处理应用程序块——入门篇

Enterprise Library Step By Step系列&#xff08;十一&#xff09;&#xff1a;异常处理应用程序块——入门篇 作者&#xff1a;Terrylee 一&#xff0e;概述 使开发人员和决策人员能够针对发生在企业应用程序体系结构层的异常处理创建一致的策略。它的实现方法如下&#xff1…

qt商业版和开源版的区别_微擎商业版系统V2.0.9全开源版纯净框架

微擎商业版系统V2.0.9全开源版纯净框架_全新界面无后门无任何限制。该源码不含任何安装模块&#xff0c;最重要的是该版本是一键安装版&#xff0c;主要你上传到服务器上&#xff0c;然后直接运行域名就会直接进入安装环境&#xff0c;不会像网络上的其他版本&#xff0c;还需要…

Jibx Jersey2集成

Jersey2为Jackson和JAXB提供内置支持。 但是默认情况下不支持Jibx。 要将Jibx与Jersey2结合使用&#xff0c;我们将XML输入作为流&#xff0c;并在接收到请求之后&#xff0c;使用Jibx对其进行解析。 但是实际上&#xff0c;有更好的方法可以使用MessageBodyReader和MessageBod…

js 的起源故事

"1994年&#xff0c;网景公司&#xff08;Netscape&#xff09;发布了Navigator浏览器0.9版。这是历史上第一个比较成熟的网络浏览器&#xff0c;轰动一时。但是&#xff0c;这个版本的浏览器只能用来浏览&#xff0c;不具备与访问者互动的能力。......网景公司急需一种网…

CMD命令也要用好

以前一些程序需要执行一些Dos命令&#xff0c;一般都是写成一个Bat文件&#xff0c;然后通过Shel来调用&#xff0c;实际上一些简单得用法完全可以这样用&#xff1a;VBA.Shell "cmd /c cmd /? > c:\cmdhelp.txt"VBA.Shell "cmd /c Type c:\cmdhelp.txt >…

网络上各台计算机语言,人类使用语言来交流,同样,网络上的各台计算机之间也用某种语言交换信息,这样的语言通常指()。...

相关题目与解析计算机语言是一种人与计算机之间交换信息的工具。案例2&#xff1a;计算机网络漫谈所谓计算机网络&#xff0c;就是把分布在不同地理区域的计算机与专门的外部设备用通信计算机语言是用来解决人和计算机交换信息的。关于汇编语言的说法错误的是()计算机语言是用来…

og4j日志文件乱码问题的解决方法

现象&#xff1a;在默认语言非中文&#xff08;或者说默认语言不支持中文的&#xff09;的Windows、Linux、Unix上&#xff0c;用log4j打印日志&#xff0c;出现乱码&#xff0c;常见的就是一堆问号。 解决方法&#xff1a; 如果是log4j.properties为配置文件&#xff0c;比如&…

设计模式中的六大基本原则

软件设计中的基本共识&#xff1a; 1&#xff0c;高内聚&#xff0c;低耦合&#xff1a;如果想使软件系统架构稳定&#xff0c;那么我们期望软件的各模块内元素结合的紧密&#xff0c;而模块之间的耦合度&#xff08;关联性&#xff09;越低越好。高内聚不仅体现在模块上&#…

广元南山隧道南河互通立交图_广元城区一隧道工程竣工时间已定,今后出行更加方便了!...

4月15日&#xff0c;伴着轰隆的机械声&#xff0c;记者踏入国道212线南山隧道工程项目建设现场&#xff0c;突然眼前飘来一阵细密小雨&#xff0c;抬头望去&#xff0c;原来是建设边坡上一排白色雾炮机正在进行降尘作业。记者看到&#xff0c;数控钢筋加工厂内工人们正抓紧预制…

Java EE 7:新增功能???

我有点“晚点”&#xff0c;可以这么说……就Java EE 7的 “博客”而言。 自2013年6月发布以来&#xff0c;已经差不多10个月了 &#xff0c;但是它仍然相对较新。 就我个人而言&#xff0c;仅仅是因为它的易用性和所购买的功能范围之广&#xff0c;我对此感到很兴奋。但是&…

浏览器的同源策略及跨域解决方案

同源策略 一个源的定义 如果两个页面的协议&#xff0c;端口&#xff08;如果有指定&#xff09;和域名都相同&#xff0c;则两个页面具有相同的源。 举个例子&#xff1a; 下表给出了相对http://a.xyz.com/dir/page.html同源检测的示例: URL结果原因http://a.xyz.com/dir2/ot…

sass继承

extend sass中&#xff0c;选择器继承可以让选择器继承另一个选择器的所有样式&#xff0c;并联合声明。使用选择器的继承&#xff0c;要使用关键词extend&#xff0c;后面紧跟需要继承的选择器。 scss.style css.style 从sass 3.2.0以后就可以定义占位选择器%。 这种选择器…

论中国传统辩证推理科学理论范式(ZZ)

摘要&#xff1a;西方科学的形式逻辑以一系列相互独立的公理、设定、经验模型等为大前提&#xff0c;以不矛盾的逻辑为推理手段&#xff0c;构建其系统的科学理论&#xff0c;决定了其理论体系下的世界是众多不连续的带状、绳索状或网状结构的共存体&#xff0c;而不可能是一个…

计算机病毒及其防治评课,区初中信息技术教研活动公开课评课感想

今天上午&#xff0c;在我校成功举行了区初中信息技术教研活动&#xff0c;总共开设了三节课&#xff0c;都是由我校老师执教的。听后受益匪浅&#xff0c;感受颇深&#xff0c;以下是本人的评课感想。一、首先说一下三位老师的共同点&#xff1a;1、三位老师都用了导学案&…

Django—路由层,视图层

路由层urls 浏览器会自动给url后加一个“/” django会自动给路由的正则表达式前面加一个“/” django会给任何不带“/”结尾的url语句添加“/”&#xff08;可设置&#xff09; 短路路由规则&#xff1a;匹配到第一条就忽略后面所有&#xff01; 所以路由顺序很重要&#xff01…

分数怎么化成带分数_人教版五年级下册第4单元带分数及把假分数化成整数或带分数教学视频+知识点...

|点击题目下方蓝字一键关注 小学生知识库|【教学视频】分数的分类与互化【知识点】带分数的意义和特征&#xff1a;像…这样由整数和真分数合成的数叫做带分数。假分数化成整数或带分数的方法是什么&#xff1f;①当假分数的分子是分母的倍数时&#xff0c;这个假分数可以化成整…

Java 8功能教程– ULTIMATE指南(PDF下载)

编者注&#xff1a;在本文中&#xff0c;我们提供了全面的Java 8功能教程。 自Java 8公开发布以来已经有一段时间了&#xff0c;所有迹象都表明这是一个非常重要的版本。 我们在Java Code Geeks处提供了大量教程&#xff0c;例如“ 玩Java 8 – Lambda和并发” &#xff0c;“…