欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

java 8 语法糖_Java8的lamada算是一种语法糖吗?

发布时间:2025/3/20 java 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java 8 语法糖_Java8的lamada算是一种语法糖吗? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

语法糖是啥?语法糖没有一个官方的定义(或者说定义相当宽泛),更像是一种观念:任何让你写着爽、但是实际发生的和你看到的不一样的东西都可以“被认为”是语法糖。例如最常见的Integer和int的自动装拆箱操作背后就是语法糖。看上去你在写

Integer i = 1234;

int j = new Integer(2345);

编译器在背后偷偷摸摸地帮你加了一些料:

Integer i = Integer.valueOf(1234); // 实际生成的字节码的等价代码

int j = new Integer(2345).intValue();

在Java代码的编译过程中有一步叫做“解语法糖”(desugar),就是做这种偷偷摸摸的事情的。

在JDK的源代码里搜索"lambda desugar"我们可以很容易找到相关的解语法糖代码:https://github.com/frohoff/jdk8u-jdk/blob/master/src/share/classes/java/lang/invoke/LambdaMetafactory.java#L181-L191​github.comhttps://github.com/openjdk/jdk/blob/master/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java#L81​github.com

/**

* This pass desugars lambda expressions into static methods

*

*

This is NOT part of any supported API.

* If you write code that depends on this, you do so at your own risk.

* This code and its internal interfaces are subject to change or

* deletion without notice.

*/

public class LambdaToMethod extends TreeTranslator {这个pass(类似于“一趟扫描”的意思,在生成抽象语法树的过程中,编译器可能要进行多趟扫描)将lambda表达式解语法糖成为静态方法。

* @apiNote These linkage methods are designed to support the evaluation

* of lambda expressions and method references in the Java

* Language. For every lambda expressions or method reference in the source code,

* there is a target type which is a functional interface. Evaluating a lambda

* expression produces an object of its target type. The recommended mechanism

* for evaluating lambda expressions is to desugar the lambda body to a method,

* invoke an invokedynamic call site whose static argument list describes the

* sole method of the functional interface and the desugared implementation

* method, and returns an object (the lambda object) that implements the target

* type. (For method references, the implementation method is simply the

* referenced method; no desugaring is needed.)……对Iambda表达式求值的过程会产生一个对应的目标类型(函数接口)的对象。对于每个lambda表达式的求值,推荐的方法是将lambda方法体解语法糖成为一个方法……

所以,不管你觉得是不是,也不管我觉得是不是,OpenJDK的实现认为它是。

总结

以上是生活随笔为你收集整理的java 8 语法糖_Java8的lamada算是一种语法糖吗?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。