【发布时间】:2017-09-29 07:30:16
【问题描述】:
我一直在围绕 Vaadin 的 GUI 工作,我的 IT 主管提供了一些课程。这一切都很好,但是,今天,我遇到了我不能在 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 表达式的签名与函数式接口方法 resetButtonClicked() 的签名不匹配
ResetButtonForTextField 类型中的方法 addResetButtonClickedListener(ResetButtonClickListener) 不适用于参数 ((ev) -> {})
即使我这样定义 lambda 表达式:(ResetButtonClickListener ev) -> {} 仍然会报错。
所以问题是,为什么我不能在那里使用 lambda 表达式?我在代码声明中遗漏了什么?
【问题讨论】: