只有一个抽象方法的接口称为函数接口。您可以使用Java提供的预定义函数接口,也可以创建自己的函数接口并使用它。您可以在这里检查预定义的函数接口:预定义的函数接口它们都只有一个抽象方法。这就是原因,它们也被称为单抽象方法接口(SAM接口)。
要在Java中使用lambda表达式,您需要创建自己的函数式接口或使用Java提供的预定义函数接口。创建自己的函数接口时,请使用@FunctionalInterface
注解对其进行标记,此注释是在Java 8中引入的。尽管它是可选的,但如果使用此注释标记的接口不遵循函数接口的规则,则应该使用它,这样会出现编译错误。
定义函数式接口的规则是什么?
函数式接口应该只有一个抽象方法。除了一个抽象方法之外,它们还可以有任意数量的默认方法和静态方法。
示例1:创建自己的功能接口
@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
示例2:使用预定义的函数式接口
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
函数接口示例:使用匿名内部类与使用lambda表达式
我们甚至在java8之前就已经使用了函数接口,它们是通过使用这些接口创建匿名内部类来使用的。你一定见过Runnable
、ActionListener
、Comparator
等函数接口,它们都有一个抽象方法。让我们看一个ActionListener
的例子,看看它是如何与匿名内部类一起使用的,以及如何使用lambda表达式来实现它。
ActionListener示例:Java8之前:使用匿名内部类
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();
}
}
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();
}
}
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2168.html
暂无评论