gpt4 book ai didi

java - 为什么这里不允许使用 lambda 函数?

转载 作者:搜寻专家 更新时间:2023-10-31 08:16:25 25 4
gpt4 key购买 nike

我一直在 Vaadin 中围绕 GUI 工作,我的 IT 主管提供了一些给定的类(class)。一切都很好,但是,今天,我遇到了无法在 addListener 方法类型中使用 lambda 表达式的问题。这个方法是自定义的,作为使用它的对象。这是实现:

public class ResetButtonForTextField extends AbstractExtension {
private final List<ResetButtonClickListener> listeners
= new ArrayList<ResetButtonClickListener>();
private void addResetButtonClickedListener
(ResetButtonClickListener listener) {
listeners.add(listener);
}
//Some other methods and the call of the listeners
}
public interface ResetButtonClickListener extends Serializable {
public void resetButtonClicked();
}

要使用此扩展程序,您必须执行以下操作:

ResetButtonForTextField rb=ResetButtonForTextField.extend(button);
rb.addResetButtonClickedListener(new ResetButtonClickListener() {
@Override
public void resetButtonClicked() {
//Do some stuff here
}
});

如果我像这样在 addResetButtonClickedListener 中使用 lambda:

rb.addResetButtonClickedListener(ev -> {
//Do some magic here
}

编译器说

  • Lambda expression's signature does not match the signature of the functional interface method resetButtonClicked()

  • The method addResetButtonClickedListener(ResetButtonClickListener) in the type ResetButtonForTextField is not applicable for the arguments (( ev) -> {})

即使我这样定义 lambda 表达式:(ResetButtonClickListener ev) -> {} 仍然会出错。

所以问题是,为什么我不能在那里使用 lambda 表达式?我在代码声明中遗漏了什么?

最佳答案

函数式接口(interface)由方法组成

public void resetButtonClicked()

没有参数。您的 lambda 尝试使用 ResetButtonClickListener 类型的参数来实现它。你要做的是

rb.addResetButtonClickedListener(() -> {
// handling code goes here
});

关于java - 为什么这里不允许使用 lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46483889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com