【问题标题】:How compiler translates the lambda expressions in Java? [duplicate]编译器如何翻译 Java 中的 lambda 表达式? [复制]
【发布时间】:2015-07-05 10:56:45
【问题描述】:
//Code 1

interface Demo {
    double myMeth();
}

class MyClass {
    public static void main(String args[]) {
        Demo myDemo = () -> 98.6;
    }
}

我想知道的是,编译器是如何实现语句的?

() -> 98.6; //语句1

上面的语句等价于

//Code 2

double myMeth() {
    return 98.6;
}

那么,编译器在编译期间是否将statement 1 替换为code 2

还是编译器做其他事情?

【问题讨论】:

标签: java lambda java-8


【解决方案1】:

语义上(虽然不是实现上),基本相同

class MyClass {
    public static void main(String args[]) {
        Demo myDemo = new Demo() {
            public double myMeth() {
                return 98.6;
            }
        };
    }
}

编译器实际上并不将 lambda 表达式转换为匿名类创建表达式。 Lambda 表达式以更高效的方式实现。

【讨论】:

  • Lambda 表达式的语义也与内部类实例不同。 lambda 体内名称的含义被区别对待(无梳状查找); lambda 表达式的标识语义也不同于匿名类创建表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2013-04-22
相关资源
最近更新 更多