我在用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);
}
});
答案 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或其他地方的实现。