当前位置: 首页 > 知识库问答 >
问题:

有人把Lambda表达式移植到Java7了吗?

牟慎之
2023-03-14

当我读到Java8从lambdas产生什么样的字节码时,我想到了Java5发布的时候。当时有Retroweaver和其他工具,用于将用JDK5编译的字节码转换为在JRE1.4上运行。

有没有人为Java8 lambda创建过这样一个支持工具?它可以让Java开发人员现在就开始在生产质量的Java7 JRE上使用lambdas,而不必等待6-12个月的时间来等待Java8的GA版本。

下面是我对为什么这样的backporter应该比较容易实现的分析:

Java8 lambda似乎没有使用Java7没有的任何JVM特性(例如invokedynamic),而且Java.lang.invoke.lambdametafactory类及其依赖项看起来像纯Java,因此应该可以在第三方库中实现它们。因此,使用JDK8编译的字节码可以在JRE7上运行,方法是添加一个带有LambdaMetafactory副本的第三方库(在一个不同的包下),并转换字节码以使用该元actory。也可能生成一些合成类和方法来绕过可访问性检查,就像java.lang.invoke.MagicLambdaImpl似乎暗示的那样。或者为所有lambda生成匿名内部类,就像一些首次启用lambda的早期访问JDK所做的那样。

共有1个答案

耿俊彦
2023-03-14

现在有了Retrolambda用于转换Java8字节码,它使用lambda表达式和方法引用在Java7、6或5上工作。(Java 1.4给出了验证错误;没有进一步调查。)

 类似资料:
  • 问题内容: 阅读有关Java 8从lambdas产生什么样的字节码的信息,我想到了Java 5发布的时间。那时有Retroweaver和其他工具,可将用JDK 5编译的字节码转换为可在JRE 1.4上运行。 是否有人为Java 8 lambda创建了这种反向移植工具? 这将使Java开发人员从今天开始已经在生产质量的Java 7 JRE上使用lambda,而不必等待6-12个月的Java 8 GA

  • (译注:目前支持lambda的gcc编译器版本为4.5,其它详细的编译器对于C++11新特性的支持请参考http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport) Lambda表达式是一种描述函数对象的机制,它的主要应用是描述某些具有简单行为的函数(译注:Lambda表达式也可以称为匿名函数,具有复杂行为的函数可以采用命名函数对象,当然,何谓复杂

  • Lambda表达式在Java 8中引入,并被吹捧为Java 8的最大特性.Lambda表达式有助于函数式编程,并简化了很多开发。 语法 (Syntax) lambda表达式的特征在于以下语法。 parameter -> expression body 以下是lambda表达式的重要特征。 Optional type declaration - 无需声明参数类型。 编译器可以从参数的值推断出相同的

  • 问题内容: Java8中添加了Lambda表达式。我想理解为什么这很重要。对于尚未接触函数式编程习惯的Java程序员意味着什么?这是否意味着我可以编写出性能更好的代码或可大规模扩展的代码,还是只会使代码的详细程度降低。或全部。 问题答案: Oracle已经提供了有关该主题的教程。它列出了几个很好的用例。 在找到链接之前,我要说的是lambda表达式可让您将“函数”传递给代码。因此,您可以更轻松地编

  • 主要内容:函数式接口Lambda 表达式(Lambda expression)是一个匿名函数,基于数学中的λ演算得名,也可称为 闭包(Closure)。现在很多语言都支持 Lambda 表达式,如 C++、 C#、 Java、 Python 和 JavaScript 等。 Lambda 表达式是推动 Java 8 发布的重要新特性,它允许把函数作为一个方法的参数(函数作为参数传递进方法中),下面通过例 1 来理解 L

  • 1 Java8 Lambda表达式的介绍 Lambda表达式是Java8中包含的一项新的重要功能。它提供了一种简洁明了的方式来使用表达式表示一个方法接口。在Collection集合中非常有用。它有助于集合元素的迭代,过滤和从集合中提取数据。 Lambda表达式用于提供具有功能接口的接口的实现。它节省了大量代码。在使用Lambda表达式的情况下,我们无需再次定义用于提供实现的方法。我们只编写实现代码