当前位置: 首页 > 面试题库 >

是否有人将Lambda表达式回移植到Java 7?

宿嘉
2023-03-14
问题内容

阅读有关Java 8从lambdas产生什么样的字节码的信息,我想到了Java
5发布的时间。那时有Retroweaver和其他工具,可将用JDK
5编译的字节码转换为可在JRE 1.4上运行。

是否有人为Java 8 lambda创建了这种反向移植工具? 这将使Java开发人员从今天开始已经在生产质量的Java 7
JRE上使用lambda,而不必等待6-12个月的Java 8 GA版本。

这是我分析为什么为什么backporter应该相对容易实现的原因:

Java 8 lambda似乎没有使用Java
7没有的任何JVM功能(例如invokedynamic),并且java.lang.invoke.LambdaMetafactory该类及其依赖项看起来像纯Java,因此应该有可能在第3方库中实现它们。因此,通过添加带有LambdaMetafactory副本的第三方库(在不同的程序包下)并通过转换字节码以使用该元工厂,可以使使用JDK
8编译的字节码在JRE
7上运行。java.lang.invoke.MagicLambdaImpl似乎暗示,也许还会生成一些综合类和方法来绕过可访问性检查。或者像所有第一个启用了lambda的Early
Access JDK一样为所有lambda生成匿名内部类。


问题答案:

现在有Retrolambda用于转换使用lambda表达式和方法引用的Java
8字节码,以在Java 7、6或5上运行。(Java
1.4给出了验证错误;没有进一步研究。)



 类似资料:
  • 当我读到Java8从lambdas产生什么样的字节码时,我想到了Java5发布的时候。当时有Retroweaver和其他工具,用于将用JDK5编译的字节码转换为在JRE1.4上运行。 有没有人为Java8 lambda创建过这样一个支持工具?它可以让Java开发人员现在就开始在生产质量的Java7 JRE上使用lambdas,而不必等待6-12个月的时间来等待Java8的GA版本。 下面是我对为什

  • 我最近接触了Java8,我正在尝试学习Lambda表达式。我想做一些图形计算,我的代码到目前为止: 所有这些代码都是用于图形的,除了和使用的操作之外,所有内容都是基本的数学(加、减、乘、模),并且可以单独针对每个像素执行。 现在的问题是:有可能在GPU上运行这个吗?或者这甚至是自动基于GPU的?(我记得在什么地方读到过这个,但我不确定)

  • 我正在编写一个lambda表达式来将给定的纬度和经度转换为地址。表达式应该以坐标为参数,并返回其相应的地址。但是,返回的值为null。以下是我的班级: 以下是logcat的输出: 以下是我的用法: 是类的对象,以下是相关接口: 当我尝试从相关适配器打印坐标时,它们会正确打印。因此,位置正在正确设置,但是当我试图从另一个类访问它时,它会显示字符串的空值。你能建议一个替代方法来从表达式中提取位置吗?

  • 问题内容: Go是否支持lambda表达式或类似内容? 我想从使用lambda表达式(Ruby)的另一种语言移植库。 问题答案: 这是一个示例,请仔细复制并粘贴:

  • 团队 只是尝试从3.1.2迁移Spring Security。发布到5.1.4。释放。我们正在使用基于xml的配置,并检查是否有任何参考资料可以帮助我进行这项活动。 我已经做了更改并解决了除以下问题之外的大多数运行时问题。我相信它也没有给用户详细信息服务打电话。 SecurityContextPersistenceFilter:急切创建的会话:a4931bcd-f260-4382-ad88-462

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