编译器如何在Java中翻译lambda表达式?
我想知道的是,编译器是如何实现该语句的 ->98.6//报表1 上述声明相当于编译器如何在Java中翻译lambda表达式?,java,lambda,java-8,Java,Lambda,Java 8,我想知道的是,编译器是如何实现该语句的 ->98.6//报表1 上述声明相当于 //Code 1 interface Demo { double myMeth(); } class MyClass { public static void main(String args[]) { Demo myDemo = () -> 98.6; } } 那么,编译器是否在编译期间用代码2替换语句1 或者编译器做了其他的事情?在语义上,虽然不是实现上,但基本
//Code 1
interface Demo {
double myMeth();
}
class MyClass {
public static void main(String args[]) {
Demo myDemo = () -> 98.6;
}
}
那么,编译器是否在编译期间用代码2替换语句1
或者编译器做了其他的事情?在语义上,虽然不是实现上,但基本上与
//Code 2
double myMeth() {
return 98.6;
}
编译器实际上不会将lambda表达式转换为匿名类创建表达式。Lambda表达式以更高效的方式实现。阅读本文:尝试使用javap-c-v-pmyclass.class反编译类文件,您可以自己查看!Lambda表达式的语义也与内部类实例不同。lambdas主体内的名称含义被区别对待,无需梳理查找;lambda表达式的标识语义也不同于匿名类创建表达式的标识语义。
class MyClass {
public static void main(String args[]) {
Demo myDemo = new Demo() {
public double myMeth() {
return 98.6;
}
};
}
}