原文: https://beginnersbook.com/2017/10/java-functional-interfaces/
只有单个抽象方法的接口称为函数式接口。您可以使用 Java 提供的预定义函数式接口,也可以创建自己的函数式接口并使用它。您可以在这里检查预定义的函数式接口:预定义的函数式接口它们都只有一个抽象方法。这就是原因,它们也被称为单抽象方法接口(SAM 接口)。
函数式接口应该有只有一个抽象方法。除了一个抽象方法,它们还可以包含任意数量的默认和静态方法。
@FunctionalInterface
interface MyFunctionalInterface {
public int addMethod(int a, int b);
}
public class BeginnersBookClass {
public static void main(String args[]) {
// lambda expression
MyFunctionalInterface sum = (a, b) -> a + b;
System.out.println("Result: "+sum.addMethod(12, 100));
}
}
输出:
Result: 112
import java.util.function.IntBinaryOperator;
public class BeginnersBookClass {
public static void main(String args[]) {
// lambda expression
IntBinaryOperator sum = (a, b) -> a + b;
System.out.println("Result: " + sum.applyAsInt(12, 100));
}
}
输出:
Result: 112
我们在 java8 之前就已经使用了函数式接口,它们是通过使用这些接口创建匿名内部类来使用的。你必须已经看过像Runnable
,ActionListener
,Comparator
等函数式接口。它们都有单一的抽象方法。让我们看一个ActionListener
的例子,看看它如何与Anonymous
内部类一起使用,以及如何使用 lambda 表达式实现它。
ActionListener
示例:在 Java 8 之前:使用匿名内部类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Example extends JFrame
{
JButton button;
public Example()
{
setTitle("Button Action Example without Lambda Expression");
setSize(400,300);
setVisible(true);
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
button = new JButton("Button");
button.setBounds(100,100,90,40);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.out.println("You clicked the button.");
}
});
add(button);
}
public static void main(String args[])
{
new Example();
}
}
ActionListener
示例:Lambda 表达式
import javax.swing.*;
import java.awt.*;
class Example extends JFrame
{
JButton button;
public Example()
{
setTitle("Button Action Example using Lambda Expression");
setSize(400,300);
setVisible(true);
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
button = new JButton("Button");
button.setBounds(100,100,90,40);
//Lambda expression
button.addActionListener(e->
System.out.println("You clicked the button."));
add(button);
}
public static void main(String args[])
{
new Example();
}
}