java lambda表达式

lambda表达式原理,在类中新增1个私有静态类,方法名为lambda$方法名$index
  public void method() {
        List<Integer> list = Arrays.asList(1);
        list.forEach(item -> {
            item = item + 1;
            System.out.println(item);
        });
    }

通过javap -c -private XX.class查看字节码

public void method();
    Code:
       0: iconst_1
       1: anewarray     #5                  // class java/lang/Integer
       4: dup
       5: iconst_0
       6: iconst_1
       7: invokestatic  #6                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      10: aastore
      11: invokestatic  #7                  // Method java/util/Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
      14: astore_1
      15: aload_1
      16: invokedynamic #8,  0              // InvokeDynamic #0:accept:()Ljava/util/function/Consumer;
      21: invokeinterface #9,  2            // InterfaceMethod java/util/List.forEach:(Ljava/util/function/Consumer;)V
      26: return

  private static void lambda$method$0(java.lang.Integer);
    Code:
       0: aload_0
       1: invokevirtual #10                 // Method java/lang/Integer.intValue:()I
       4: iconst_1
       5: iadd
       6: invokestatic  #6                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
       9: astore_0
      10: getstatic     #11                 // Field java/lang/System.out:Ljava/io/PrintStream;
      13: aload_0
      14: invokevirtual #12                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      17: return
}

多了1个方法,private static void lambda$method$0(java.lang.Integer);
如果新增lambda$method$0一个方法,代码无法编译过

 private static void lambda$method$0(Integer item) {
        System.out.println(item);
  }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容