学习java核心技术卷之lambda随笔

Lambda表达式

  形式:参数,箭头(->),表达式

    参数类型要写,如果可以推导出来则可以不写

    只有一个参数可以省略小括号

    无参数要写空括号()

    *如果分支返回值,那么所有分支都要返回值,否则不合法

   函数式接口:只有一个抽象方法的接口(可以用@FunctionalInterface注解标记)

    比如,javax.swing.Timer中可以这样

      Timer t = new Timer(1000, event ->

      {

        …

      });

    这个构造器的第二个参数需要一个ActionListener实例,ActionListener

    就是只有一个方法的接口,所以可以使用 lambda表达式。

  方法引用

    Object::instanceMethod

    Class::staticMethod

    Class::instanceMethod

    如:event -> System.out.println(event)  等价于 System.out :: println

      Math::pow  等价于 (x, y) -> Math.pow(x, y)

    而第三种情况,第一个参数会成为方法的目标如 :String::compareToIgnoreCase 等价于(x,y) -> x.compareToIgnoreCase(y)

    还有可以使用this和super参数;

    Super :: instanceMethod

  构造器引用:

    X -> new int[x] 等价于 int[]::new

    Person x = New Person(…) 等价于 Person::new

    当有多个构造器时,编译器会从上下文推导

猜你喜欢

转载自www.cnblogs.com/tinfinite/p/8963660.html