为什么 lambda 转换需要生成静态方法?
Lambda 转换是一个两步过程,一:将 lambda 解加为同一类中的静态方法。
public class Main {
public static void main(String[] args) {
Runnable r = () -> System.out.println("Hello");
System.out.println(Arrays.asList(Main.class.getDeclaredMethods()));
}
}
[private static void Main.lambda$main$0(), public static void Main.main(java.lang.String[])]
第二:生成实现功能接口的类。
System.out.println("A class has been generated: " + r.getClass());
System.out.println("That implements a Functional Interface: " + Arrays.asList(r.getClass().getInterfaces()));
已生成一个类:类 Main$$Lambda$1/149928006
这实现了一个功能接口:[interface java.lang.Runnable]
问:这种静态方法有什么需要?为什么不能将 lambda 主体直接放入接口方法中?像这样:
class Main$$Lambda$1 {
public void run() {
/* Lambda body here */
}
}