匿名类可以替换为lambda吗?

时间:2019-01-22 21:04:51

标签: java

我在用intellij编写一些代码时,它不断弹出,

  

匿名类可以用lambda代替吗?

那是什么意思?什么是lambda表达式?如何用lambda替代Anonymous类?

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

}
});       

2 个答案:

答案 0 :(得分:0)

您的代码可以更改为此:

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

之所以这样做,是因为ActionListener是一个功能接口,这意味着它恰好具有您必须实现的一种抽象方法。 Lambda基本上可以代替单个功能并充当该接口的实现。

Lambda的行为类似于方法actionPerformed的实现,并且(event)是该方法的参数,而-> { ... }是该方法的主体。

答案 1 :(得分:0)

可以用lambda替换匿名新邮件吗?

这不是100%正确,具有一种抽象方法的接口的匿名类可以用lambda表达式(称为功能接口)代替

由于ActionListener只有一种方法actionPerformed(ActionEvent e),因此您可以使用lambda表达式编写它

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

Lambda表达式

  

匿名类的一个问题是,如果匿名类的实现非常简单(例如仅包含一个方法的接口),则匿名类的语法可能看起来很笨拙且不清楚。在这些情况下,您通常试图将功能作为参数传递给另一种方法,例如,当某人单击按钮时应采取什么措施。 Lambda表达式使您能够执行此操作,将功能视为方法参数,或将代码视为数据。

功能性接口

  

功能接口只有一种抽象方法。由于默认方法具有实现,因此它们不是抽象的。如果接口声明了一个覆盖java.lang.Object的公共方法之一的抽象方法,则该方法也不计入接口的抽象方法计数,因为该接口的任何实现都将具有java.lang.Object或其他地方的实现。