Java 匿名类可以替换为lambda吗?

Java 匿名类可以替换为lambda吗?,java,Java,“当我在用intellij编写一些代码时,它不断出现,”他说 匿名类可以替换为lambda吗 Play.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JPanel playscreen = new JPanel(); playscreen.setBackground(Color.WHITE); p.add(playscreen); } });

“当我在用intellij编写一些代码时,它不断出现,”他说

匿名类可以替换为lambda吗

Play.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JPanel playscreen = new JPanel();
playscreen.setBackground(Color.WHITE);
p.add(playscreen);

}
});       
那是什么意思?什么是lambda表达式以及如何用lambda替换匿名类

Play.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JPanel playscreen = new JPanel();
playscreen.setBackground(Color.WHITE);
p.add(playscreen);

}
});       

您的代码可以更改为:

Play.addActionListener((event) -> {
    JPanel playscreen = new JPanel();
    playscreen.setBackground(Color.WHITE);
    p.add(playscreen);
});
之所以可以这样做,是因为ActionListener是一个功能接口,这意味着它只有一个必须实现的抽象方法。lambda基本上能够代替单个函数,并充当该接口的实现

Lambda的作用类似于actionPerformed方法的实现,event是该方法的参数,而->{…}是该方法的主体。

匿名new可以替换为Lambda吗

这不是100%正确的,对于一个具有一个抽象方法的接口,匿名类可以用lambda表达式替换,该表达式称为函数接口

因为ActionListener只有一个方法actionPerformedActionEvent e,所以可以使用lambda表达式编写它

Play.addActionListener((event) -> {
JPanel playscreen = new JPanel();
playscreen.setBackground(Color.WHITE);
p.add(playscreen);
});
Lambda表达式

匿名类的一个问题是,如果匿名类的实现非常简单,例如只包含一个方法的接口,那么匿名类的语法可能看起来很难理解。在这些情况下,您通常试图将功能作为参数传递给另一个方法,例如当有人单击按钮时应该采取什么操作。Lambda表达式允许您这样做,将功能视为方法参数,或将代码视为数据

功能接口

函数接口只有一个抽象方法。因为默认方法有一个实现,所以它们不是抽象的。如果接口声明一个抽象方法覆盖java.lang.Object的一个公共方法,则该方法也不计入接口的抽象方法计数,因为接口的任何实现都将具有来自java.lang.Object或其他地方的实现


请准确描述你需要做什么。