为了减少由众多匿名类型的实例化引起的混乱,我正在探索利用Java 8 lambda的可能性。
在生产环境中使用Java
8和lambda之前,一个重要的考虑因素是使用lambda表达式的JDK8编译代码是否可以在Java运行时的早期版本上执行。我对JRE6和JRE7作为目标平台特别感兴趣。
一方面,我了解到lambda只是围绕包含一个方法的匿名类的实例化的语法糖。另一方面,我不确定这种等效性是否意味着为每个生成的字节码在除JRE8之外的所有JVM版本中都是相同和/或兼容的。
例如,给定单方法接口:
public interface Action<T> {
public void perform(T argument);
}
以下两个片段在功能上是等效的:
使用lambda:
final Action<String> y = i -> System.out.println(i);
使用匿名类实例:
final Action<String> y = new Action<String>() {
@Override
public void perform(final String i) {
System.out.println(i);
}
};
我的具体问题是两个结构的 语义对 等是否扩展到其 编译表示的对等
。此外,如果它们确实等效编译,这种等效性是否表示可以将lambda表达式的编译形式托管在Java运行时的早期版本中而无需进行修改?
通常,Javac编译器不可能使用高于目标JVM级别的源级别。因此答案是否定的。
ngrok承诺有关其接口的兼容性和稳定性,以便您可以自信地构建集成顶部,知道在升级到较新版本时期望的更改。 兼容性承诺 Point Release (2.0.0 -> 2.0.1) - ngrok承诺在点发布之间没有突破性的变化 Minor Version Change (2.0 -> 2.1) - ngrok可能会进行小的更改,打破兼容性的次要版本更改。 ngrok承诺,任何破坏性更改将由一个版
当我使用搜索功能时,我得到一个http Status500错误。它声称 错误报告 搜索servlet代码 结果jsp
问题内容: Java版本之间是否存在不兼容的问题,其中针对Java版本X的Java源代码/ Java类文件不会在版本Y(其中Y> X)下编译/运行? “ Java版本”是指诸如以下的版本: JDK 1.0(1996年1月) JDK 1.1(1997年2月) J2SE 1.2(1998年12月) J2SE 1.3(2000年5月) J2SE 1.4(2002年2月) J2SE 5.0(2004年9月
如果我有一个用SwiftUI制作的应用程序,它是否适用于iOS13以下的iOS?
问题内容: 我的理解是,为了维护源代码兼容性,Java从未将新方法引入公共接口,因为这破坏了实现接口的现有客户端。 Java发行说明说明 通常,该政策如下,但以下列出的不兼容之处除外: 维护版本(例如1.4.1、1.4.2)未引入任何新的语言功能或API。他们将保持彼此之间的源兼容性。 功能版本和主要版本(例如1.3.0、1.4.0、5.0)保持向上但不向下的源兼容性。 然而,包和继续发展,并介绍
我用Intellij来解决这个问题。但我有最新版本的所有新安装在我的系统。 ...已由最新版本的Java运行时(类文件版本57.0)编译,此版本的Java运行时仅识别52.0以下的类文件版本 我已经设定: 完整的错误消息: