Loop.times(5, () -> {
System.out.println("looping");
});
Run Code Online (Sandbox Code Playgroud)
哪些有效编译到?
for(int i = 0; i < 5; i++)
System.out.println("looping");
Run Code Online (Sandbox Code Playgroud)
或类似的东西
new CallableInterfaceImpl(){
public void call(){
for(int i = 0; i < 5; i++)
System.out.println("looping");
}
}.call();
Run Code Online (Sandbox Code Playgroud)
它会替换(内联类),还是实际创建一个匿名类?
请考虑以下Java 8代码段.
public static void main(String[] args) {
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
Consumer<Integer> consumer = x -> System.out.print(x);
integers.forEach(consumer);
}
Run Code Online (Sandbox Code Playgroud)
什么是Consumer<Integer> consumer = x -> System.out.print(x)编译到?
我知道Lambdas不是作为匿名内部类实现的.然而Consumer<Integer>,接口因此x -> System.out.print(x)必须产生某种对象,但不清楚生成什么样的对象.
Java 8中是否有一些新类型的对象来表示lambda表达式?
更新这里是程序与eclipse java 8编译器一起编译的反编译程序,下面的输出是在打开类文件时来自eclipse.
看起来lambda表达式在包含lambda表达式的类上变成了一个静态方法 private static synthetic void lambda$0(java.lang.Integer x);
// Compiled from Example.java (version 1.8 : 52.0, super bit)
public class Example {
// Method descriptor #6 ()V
// Stack: 1, Locals: 1
public Example();
0 aload_0 …Run Code Online (Sandbox Code Playgroud)