Lambda表达式

Note

在 Lambda 表达式中,无需指定类型,程序依然可以编译。这是因为 javac 根据程序的上下文 (addActionListener 方法的签名) 在后台推断出参数类型

//不包含参数,实现了Runnable,返回类型为void  
Runnable noArgument = () -> System.out.println("Hello World");  
//只包含一个参数  
ActionListener oneArgument = i -> System.out.println("argument");  
//Lambda表达式猪蹄不仅可以是一个表达式,也可以是一段代码块  
Runnable multiStatement = () -> {  
    System.out.println("Hello");  
    System.out.println("World");  
};  
//不是两个数字的和,而是x+y这段代码  
BinaryOperator<Long> add = (x, y) -> x + y;  
  
BinaryOperator<Long> addExplicit = (x, y) -> x + y;

函数接口

函数接口是只有一个抽象方法的接口,用作 Lambda 表达式的类型。使用只有一个方法的接口来表示某特定方法并反复使用,接口中单一方法的命名并不重要,只要方法签名和 Lambda 表达式的类型匹配即可。

ActionListener 接口

public interface ActionListener extends EventListener {  
    public void actionPerformed(ActionEvent e);  
}

ActionListener 只有一个抽象方法 actionPerformed,被用来表示只接受一个参数返回空。

小结

  • Lambda 表达式是一个匿名方法,将行为像数据一样进行传递。
  • Lambda 表达式的常见结构: BinaryOperatoradd=(x, y) → x+y。
  • 函数接口指仅具有单个抽象方法的接口,用来表示 Lambda 表达式的类型。