您好,欢迎光临本网站![请登录][注册会员]  
文件名称: Java闭包 Java闭包
  所属分类: Java
  开发工具:
  文件大小: 544kb
  下载次数: 0
  上传时间: 2019-07-02
  提 供 者: aba****
 详细说明:在2013年发布的 JavaSE8 中包含一个叫做 Lambda Project 的计划,在 JSR-335 草案 中有描述。 JSR-335 将闭包引入了 Java 。闭包在现在的很多流行的语言中都存在,例如 C++、C# 。闭包允许我 们创建函数指针,并把它们作为参数传递。在这篇文章中,将粗略的看一遍Java8的特性,并介绍 Lambda表达式。而且将试着放一些样例程序来解释一些概念和语法。e⊥aSS Member 这个例子很好的说明了我上面所说的这个问题,而 Lambda表达式几乎解决了匿名内部类带来的所有问 题。在我们进一步探讨 lambda表达式之前,让我们来看一看 Functional interfaces Functional Interfaces Functional Interfaces是一个只有单个方法的接口,这代表了这个方法契约。 上面的定义中的只有一个实际上并没有那么简单。这段有些不懂,请读者查看原文(The" Single method can exist in the form of multiple abstract methods that are inherited from superinterfaces. But in that case the inherited methods should logically represent a single method or it might redundantly declare a method that is provided by classes like Object, e. g tostring. 下面的例子清楚的展示了怎样理解 Functional interfaces的概念。 interfac Runnable void un 02 Function al 3 interfac boolean equals(o bject obj)i) // Not function equals 1 S lready an mp licit member interfac e bar extends Fco fint compare( ring 2);} 06 Function al:Bar a abstract ncn- Cbject method nterfac Comparat or i 08 b。 olean equals(o 上ject obj)i 1n七 compare( _0 Function Comparat one abstract non- Cbject method interfac e Hoo [int () Cbject clone()i Not function method Cbject.c lcne is not blic interfac e×{ 1n七 m(Terah le arg) interfac e y i 主nt Im(Terah le ary) interfac extends ,Y{} Function al: two metnods but they have the same tu 大多数回调接囗都是 Functional Interfaces。例如 Runnable, callable, Comparator等等。以前被称作 SAM (Single abstract Method) Lambda表达式 我们上边说过,匿名类的一个主要问题是是代码的层级看起来很乱,也就是Ⅴ erica|Prob|em了, Lamba表达式实际上就是匿名类,只不过他们的结构更轻量,更短。 Lambda表达式看起来像方法。 他们有一个正式的参数列表和这些参数的块体表达。 (String s)-> engh 43 (int nt y) 上面的例子的意思是,第一个表达式接收一个 String变量作为参数,然后返回字符串的长度。第二个不 带任何参数,并返回43。最后,第三个接受两个整数X和y,并返回其和 在看了许多文字后,终于,我可以给出第一个 Lambda表达式的例子了,这个例子运行在 Javase8的预 览版下 public class Firstly 上 depre ssion i 02 ubI ic sring ariable Class 工eve1 Variable 03 pu c s七a七⊥c y。 (Str ng[] arg)t 04 neW First lam ssion( l ambdaex ression () 06 ic void lambda pression 07 variable Method 工cca1 variable nfinal variable nThis is non final variable new //Be low line gives compilat ⊥cn error //St Var1ab⊥e Method Variable 2 Syst mout. p tintin( variable Syst t tintIn( this. var iable)i ). start ); 输出是 >Method lccal Variable Class Level variable 你可以比较一些使用 Lambda表达式和使用匿名内部类的区别。我们可以清楚的说,使用 Lambda表达 式的方式写匿名类解决了变量可见性的问题。你可以看一下代码中的注释, Lambda表达式不允许创建 覆盖变量。 通常的 Lambda表达式的语法包括—个参数列表,箭头关键字"->"最后是主体。主体可以是表达式(单 行语句)也可以是多行语句块。如果是表达式,将被计算后返回,如果是多行的语句块,就看起来跟方法 的语句块很相似了,可以使用 return来指定返回值。 break和 continue只能用在循环内部。 为什么选择这个特殊的语法形式呢,因为目前C#和 Scala中通常都是这种样式,也算是 Lambda表达 式的通用写法。这样的语法设计基本上解决了匿名类的复杂性。但是与此同时他也是非常灵活的,例如, 如果方法体是单个表达式,大括号和 return语句都是不需要的。表达式的结果就是作为他自己的返回 值。这种灵活性可以保持代码简洁 ambda表达式用作匿名类因此他们可以灵活运用在其他模块或在其他 Lambda表达式(嵌套的 Lambda表达式) //Lambda express enclosed within methods paramete block //Target interfac e tyo is the ethods paramete yoe S-ring user cometh n list. get property propN 小a e") /lambda express1 on is enclosed within a thread constru tor //target interfac e type contruct ars paramter Runnable new Thread (()->{ st em,out·P tintin( Running 1n differen thread") 6).start ont- family: I sans serif verdana, helvetic afont- size: x- 如果你仔细看看 lambda表达式您将看到目标接口类型不是一个表达式的一部分。编译器会帮助推断 lambda表达式的类型与周围环境。 Lambda表达式必须有一个目标类型,而他们可以适配任意可能的目标类型。当目标类型是一个接口的 时候,下面的条件必须满足,才能编译正确: ·接口应该是一个 functional interface ·表达式的参数数量和类型必须与 functional interface中声明的致 返回值类型必须兼容 functional interface中方法的返回值类型 ·抛出的异常表达式必须兼容 functional interface中方法的抛出异常声明 由于编译器可以通过目标类型的声明中得知参数类型和个数,所以在 Lambda表达式中,可以省略参数 类型声明。 compart Or c reroigno recase(s style="f ant family: sans serif tahoma verdana helvetic a' font- S12e:一 sma11;">
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: java闭包
 输入关键字,在本站1000多万海量源码库中尽情搜索: