在Java 8中,它看起来像一个类的lambdas保存在一个数组中。例如,让我们说我们有这个类:获取类的列表lambdas
public class LambdaFactory {
public Supplier<Integer> getOne(){
return() -> 42;
}
public Supplier<Integer> getTwo(){
return() -> 128;
}
public Supplier<Integer> getThree(){
return() -> 3;
}
}
,然后我把它打印出来,像这样:
System.out.println(factory.getOne());
System.out.println(factory.getOne());
System.out.println(factory.getTwo());
System.out.println(factory.getThree());
输出会像
[email protected]
[email protected]
[email protected]
[email protected]
所以我们可以看到这里有两件事。被称为两次的相同lambda给了我们相同的lambda对象(这与每次我们可以获得新内部类的anon内部类不一样)。我们也看到他们看起来像是被保存在某种类型的“Lambda”结构中,这是类的一部分
我的问题是,我可以在课堂上看到lambda表达式吗?我没有任何理由这样做,我只是喜欢解剖东西
是什么让你觉得他们在一个数组? – assylias
我认为你在这里得出错误的结论。匿名内部类通常将'$ 1'构造作为其名称的一部分 - 这是一个常见的习惯用法,即带有美元符号的类名是在运行时构建的,例如使用动态Proxy类时。 –
我想我不知道它是一个数组还是它是什么,但lambda表达式是一样的。如果我对getOne的两个供应商执行jUnit Assert.assertSame,它将通过,但如果它是annon内部类,则会失败。请参阅https://github.com/ryber/J8Lambda/blob/master/src/test/java/examples/ObjectLifeCycle.java – ryber