The following code adds Listeners to several SWT Text elements. The only difference is the code inside the Listeners method. Is there a way to make this code less repetitive by finding the correct method to use dynamically?
In this example a FocusListener is used, but it's not relevant.
private void addFocusLostListeners() {
nameText.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {}
@Override
public void focusLost(FocusEvent e) {
myDataObject.setName(nameText.getText());
}
});
ageText.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {}
@Override
public void focusLost(FocusEvent e) {
myDataObject.setAge(ageText.getText());
}
});
emailText.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {}
@Override
public void focusLost(FocusEvent e) {
myDataObject.setEmail(emailText.getText());
}
});
...
}
You could make a helper method (you need to replace TextField
with the actual class of nameText
, ageText
, etc.):
private static void addFocusListener(TextField field, Consumer<? super String> setter) {
field.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {}
@Override
public void focusLost(FocusEvent e) {
setter.accept(field.getText());
}
});
}
Which you then could call:
private void addFocusLostListeners() {
addFocusListener(nameText, myDataObject::setName);
addFocusListener(ageText, myDataObject::setAge);
addFocusListener(emailText, myDataObject::setEmail);
}