运维开发网

Lambda表达式的语法规则

运维开发网 https://www.qedev.com 2021-04-23 09:10 出处:51CTO 作者:mob604756f89f2f
Lambda表达式的基本格式是以一系列可接受的参数开始,以几个代码(即表达式体/body)结束,然后用箭头(->)将前两者分开。 注:Lambda表达式的语法仍然有可能发生变化,但是,在编写本文时,以下示例中显示的语法仍然可以正常运行。 与其他Java语法相比,Lambda表达式非常依赖类型推导,这是非常不寻常的。 下面来看看前面已经讨论过的一个例子。查看ActionListener的定义就会发现它只有一种方法。

Lambda表达式的基本格式是以一系列可接受的参数开始,以几个代码(即表达式体/body)结束,然后用箭头(->)将前两者分开。

注:Lambda表达式的语法仍然有可能发生变化,但是,在编写本文时,以下示例中显示的语法仍然可以正常运行。

与其他Java语法相比,Lambda表达式非常依赖类型推导,这是非常不寻常的。

下面来看看前面已经讨论过的一个例子。查看ActionListener的定义就会发现它只有一种方法。

ActionListener listener = event -> {ui.showSomething();};

Lambda表达式的语法规则

因此,很容易理解为“这是一个方法定义,它只对一个单独的方法声明接口”。请注意,仍然需要遵循Java静态类型的一般规则;这是使类型导出正确工作的唯一方法。

 

因此,使用Lambda表达式可以将之前编写的匿名内部类代码转换成更加紧凑的代码。

还要注意还有一种奇怪的语法。下面再看一下上面的例子。

FileFilterdirectoryFilter=(Filef)->f.isDirectory();

只需浏览一下,它看上去类似于ActionListener的示例,但是我们来看看FileFilter接口的定义。accept()方法返回一个Boolean值,但是没有显式返回语句。而是从Lambda表达式中导出返回值的类型。

Lambda表达式的语法规则

如果方法的返回类型为void,那么这就可以解释为什么要进行特殊处理。在这种情况下,Lambda表达式使用一对额外的小括号(表达式体/body)将代码部分包起来。如果没有这种奇怪的语法,类型推导就不能正确工作——但是您应该理解,这个语法可能会发生变化。

对于这种情况,Lambda表达式的表达式可能包含多个语句,需要用小括号包围表达式,但是这个语法“导出的返回类型”将不启动,因此返回类型关键字是必不可少的。

还有一点需要提醒您:目前,IDE似乎还不支持Lambda语法,因此当您第一次尝试使用Lambda表达式时,您必须特别注意javac编译器发出的警告。

Lambda表达式是自JavaSE5引入泛型以来最重大的Java语言新特性。应用得当,Lambda表达式可使你写出简洁的代码,为已有方法增加额外的功能,并能更好地适应多核处理器。

0

精彩评论

暂无评论...
验证码 换一张
取 消