在 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
,被用来表示只接受一个参数返回空。