Vaadin’de, BT yöneticim tarafından verilen bazı sınıflarla bir GUI etrafında çalışıyorum. Hepsi harika, ama bugün, ben bir addListener
yöntem türünde bir lambda ifadesi kullanamadığımı gördüm. Bu yöntem, onu kullanan nesne olarak özeldir. Böyle addResetButtonClickedListener
bir lambda kullanırsanızLambda işlevi burada neden izinli değil?
ResetButtonForTextField rb=ResetButtonForTextField.extend(button);
rb.addResetButtonClickedListener(new ResetButtonClickListener() {
@Override
public void resetButtonClicked() {
//Do some stuff here
}
});
:
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();
}
bunu yapmalısınız Bu uzantıyı kullanmak için:
rb.addResetButtonClickedListener(ev -> {
//Do some magic here
}
derleyici
söylüyor İşte uygulamasıdırFonksiyonel arabirim yöntemi imzaya sahip
lambda ifade imzası resetButtonClicked()
tipi ResetButtonForTextField yöntemi addResetButtonClickedListener (ResetButtonClickListener) bağımsız değişken ((EV) -> {}) için geçerli değildir
böyle lambda ifade tanımlamak bile: (ResetButtonClickListener ev) -> {}
hala hata veriyor.
Soru şu ki, neden orada bir lambda ifadesi kullanamıyorum? Kodun ilanında bir şey eksik miyim?
Oh, bir olay argüman alabilir Button' sınıfının 'arasında ButtonClickListeners',' etmek acostummed gördü. Bunu düşünmedim. Teşekkür ederim! – Shirkam