Java 8 lambdas是编译为内部类,方法还是其他东西?
我今天已经阅读了关于lambdas的这篇文章:
http://www.infoq.com/articles/Java-8-Lambdas-A-Peek-Under-the-Hood
本文建议,lambdas 不是作为 anon 内部类实现的(由于性能原因)。它给出了一个示例,即 lambda 表达式可以编译为类的(静态)方法。
我尝试了一个非常简单的片段:
private void run() {
System.out.println(this);
giveHello(System.out::println);
}
private void giveHello(Consumer<String> consumer) {
System.out.println(consumer);
consumer.accept("hello");
}
输出为:
sample.Main@14ae5a5
sample.Main$$Lambda$1/168423058@4a574795
hello
所以它不是同一个实例。它也不是一些中央的“Lambda工厂”实例。
那么,lambda 是如何实现的呢?