前几篇文章讨论了函数式接口和Lambda表达式语法、invokedynamic指令,以及Groovy2如何利用indy指令。本篇文章在前面几篇的基础之上,简要介绍Java8底层是如何实现Lambda表达式的。
示例代码
本文将以下面的代码为例展开讨论:
import java.util.Arrays;
import java.util.List;
public class LambdaImplTest {
public static void main(String[] args) {
m1(Arrays.asList(args));
}
public static void m1(List<String> list) {
list.sort((a, b) -> a.length() - b.length());
}
}
插入invokedynamic指令
直接利用匿名类来实现Lambda表达式肯定也是可行的,这样,Lambda表达式就只是Java编译器的语法糖而已。但是Java8并没有这样做,而