at the release of java 8 by oracle, the new lambda expressions were included. that feature was something so new, that i didn't dare to touch it. to be fair, the release was in the middle of my study and java 7 was already pretty new to me. but after my graduation, at my first job, i got in touch with these ominous lambdas. the beginning was hard, the syntax was new, but when time was passing i gained more and more confidence. today i can say that i love it and won't miss it.
however, the lambda expressions have some small downsides. you must learn the new syntax and sometimes its hard to identify the actual interface being used when writing anonymous implementations of one method interfaces.
of course there are also advantages. the new syntax is lightweight, because it reduces the boilerplate code of creating an anonymous class with one method and therefor reduces some of the complexity. the lambdas are constructed at runtime and are thread-safe. so what are your pros and cons of (not) using lambdas?
style 1:
public void translateLambadaStyle(final String locale) {
final var input = new JTextField("place your text here.");
final var submit = new JButton("submit");
submit.addActionListener(event -> translate(locale, input.getText()));
}
style 2:
public void translateClassicStyle(final String locale) {
final var input = new JTextField("place your text here.");
final var submit = new JButton("submit");
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent event) {
translate(locale, input.getText());
}
});
}
style 3:
public void innerClassListener(final String locale) {
final var input = new JTextField("place your text here.");
final var submit = new JButton("submit");
submit.addActionListener(new TranslateListener(locale, input.getText()));
}
so which style are you, 1, 2, 3 or even something else, tell me about it in the comments. 😄
I think nowadays i would definately tend to style 2 in most usecases unless the lamdba gets too big or complex. I think the downsides you mention of it being a new syntax to learn are not that relevant anymore as this feature is included in java since some time and similar features are present in other languages like Rust, Python, ECMAScript, etc
In my opinion its next to Streams one of the biggest additions to Java in the last years that is actually implemented in a decent way (in contrast to Optionals :) )