zoukankan      html  css  js  c++  java
  • 【lamba】java 8的新特性

    看到lamba表达式用起来还不错,找了几篇文章学习下:

    所以结合之前两个反编译的结果可以看到,lamdba表达式运行整体思路大致如下:
    1. lamdba表达式被编译生成当前类的一个私有静态方法
    2. 在原调用Lamdba方法的地方编译成了一个invokedynamic指令调用,同时呢也生成了一个对应的BootstrapMethod
    3. 当lamdba表达式被JVM执行,也就是碰到2中说到的invokedynamic指令,该指令引导调用LambdaMetafactory.metafactory方法,该方法返回一个CallSite实例
    4. 而这个CallSite实例中的target对象,也就是直接引用到一个MethodHandle实例,而这个MethodHandle实例会调用到1中生成的静态方法,在上面的例子就是`lambda$main$0`这个方法,完成整个lamdba表达式的使用

    另外,很重要一点:能够使用Lambda的依据是必须有相应的函数接口(函数接口,是指内部只有一个抽象方法的接口)。这一点跟Java是强类型语言吻合,也就是说你并不能在代码的任何地方任性的写Lambda表达式。实际上Lambda的类型就是对应函数接口的类型。Lambda表达式另一个依据是类型推断机制,在上下文信息足够的情况下,编译器可以推断出参数表的类型,而不需要显式指名。

    参考连接:

    http://www.cnblogs.com/CarpenterLee/p/5978721.html

    https://segmentfault.com/q/1010000008920132/a-1020000008922982

  • 相关阅读:
    Docker搭建持续集成平台Jenkins
    Selenium Webdriver 架构
    JMeter性能监控系统:Jmeter + InfluxDB + Grafana
    持续集成平台Jenkins配置方法介绍
    perl中的map
    Smarty 配置文件中的相对路径
    挑出IIS日志里某一文件的请求次数
    写PHP,内伤中....
    File::Find
    强制删除删除不了的文件
  • 原文地址:https://www.cnblogs.com/garinzhang/p/java_lamdba_study.html
Copyright © 2011-2022 走看看