相关疑难解决方法(0)

可以编译Java 8代码以在Java 7 JVM上运行吗?

Java 8引入了重要的新语言功能,例如lambda表达式.

语言中的这些更改是否伴随着编译的字节码中的这些重大更改,这些更改会阻止它在不使用某些反向转换器的情况下在Java 7虚拟机上运行?

java compatibility jvm java-7 java-8

162
推荐指数
4
解决办法
7万
查看次数

如何编译Java lambda函数?

Loop.times(5, () -> {
   System.out.println("looping");
});
Run Code Online (Sandbox Code Playgroud)

哪些有效编译到?

for(int i = 0; i < 5; i++)
    System.out.println("looping");
Run Code Online (Sandbox Code Playgroud)

或类似的东西

new CallableInterfaceImpl(){
    public void call(){
      for(int i = 0; i < 5; i++)
          System.out.println("looping");
    }
}.call();
Run Code Online (Sandbox Code Playgroud)

它会替换(内联类),还是实际创建一个匿名类?

java lambda java-8

54
推荐指数
2
解决办法
1万
查看次数

用Java 8编写的程序可以在Java 7上运行吗?

我有点困惑.

  1. Oracle称Java 8与Java 7高度兼容(向后).但是,Java 8程序可以在Java 7上成功运行(SE/EE)的可能性有多大?

  2. 如果第一点是真的,Java 8应用程序将在Java 7服务器支持上部署和执行?例如,Tomcat 8还是WildFly?

java backwards-compatibility java-server java-8

50
推荐指数
3
解决办法
5万
查看次数

Java Lambdas:它如何在JVM中运行并且是OOP吗?

例如,在匿名内部类的情况下,传递(匿名)对象引用并执行该对象的方法.

Lambdas是将在需要时执行的代码块.

遇到lambdas时JVM中会发生什么?JVM在哪里存储与lambdas相关的代码块(Heap:Young,Old或Permanent Generation)?

我尝试搜索,我得到了使用lambdas的语法但是无法理解JVM中发生的事情,因为在JAVA中,一切都是基于对象的.

  1. 所以在OOP的背景下,lambda是如何工作的?

  2. lambda违反了OOP概念吗?

  3. Lambda是否适合垃圾收集器,因为没有创建对象因此不用担心内存问题和清​​除内存?

java oop lambda jvm java-8

28
推荐指数
3
解决办法
1万
查看次数

编译的Java 8 lambda表达式是否向后兼容早期版本的Java运行时?

为了减少由匿名类型的大量实例化引起的混乱,我正在探索利用Java 8 lambdas的可能性.

在生产环境中使用Java 8和lambdas之前的一个重要考虑因素是,使用lambda表达式的JDK8编译代码是否可以在早期版本的Java运行时上执行.我特别感兴趣的是JRE6和JRE7作为目标平台.

一方面,我理解lambdas只是包含一个方法的匿名类实例化的语法糖.另一方面,我不确定这种等价意味着为每个生成的字节码在JRE8以外的JVM版本中是相同的和/或兼容的.

例如,给定单方法接口:

public interface Action<T> {
    public void perform(T argument);
}
Run Code Online (Sandbox Code Playgroud)

以下两个片段在功能上是等效的:

使用lambda:

final Action<String> y = i -> System.out.println(i);
Run Code Online (Sandbox Code Playgroud)

使用匿名类实例:

final Action<String> y = new Action<String>() {
    @Override
    public void perform(final String i) {
        System.out.println(i);
    }
};
Run Code Online (Sandbox Code Playgroud)

我的具体问题是两种结构的语义等价是否扩展到其编译表示的等价性.此外,如果它们确实等价地编译,那么这个等价是否表明lambda表达式的编译形式可以托管在早期版本的Java运行时而不进行修改?

java lambda backwards-compatibility java-8

13
推荐指数
2
解决办法
1822
查看次数

Java是向后兼容的,但是当我们将jdk从1.6升级到1.8时,为什么我们需要升级许多库?

最近,我们将Jdk版本升级1.61.8我的一个Java项目中.但是有一些编译或运行时错误,所以我必须升级一些库:

  • gradle:1.9to1.10
  • 春天:3.x4.x

那是因为他们使用的是早期版本的ASM,但仅支持jdk 1.8 5.x

Java表示它是向后兼容的,但为什么原始版本的库无法直接与jdk 1.8一起使用?

java migration java-7 java-8

10
推荐指数
2
解决办法
5873
查看次数