Lambdas
Lambdas are used to implement functional interfaces. Simply said, functional interfaces are interfaces with a single method definition. All listeners in Javacord are functional interfaces and look like this internally (simplified):
@FunctionalInterface
public interface MessageCreateListener {
void onMessageCreate(MessageCreateEvent event);
}
Before Java 8, you would have implemented this kind of listener as an anonymous class, which would look like this:
api.addMessageCreateListener(new MessageCreateListener() {
@Override
public void onMessageCreate(MessageCreateEvent event) {
// Do stuff
event.pinMessage();
}
});
In Java 8, this can be replaced with a lambda expression, which does exactly the same thing, but in a more readable fashion. The method parameter (in this case event
) is written in front of the ->
arrow, and the method body is written after it.
api.addMessageCreateListener(event -> {
// Do stuff
event.pinMessage();
});
TIP
If the method has more than one parameter, it would look like this:
(param1, param2) -> { ... }
There's even a shorter version: If you are only executing one statement, you can get rid of the { }
brackets as well:
api.addMessageCreateListener(event -> event.pinMessage());
However, the above method can be shortened even more, by replacing the lambda expression with a so called "method reference".
api.addMessageCreateListener(MessageEvent::pinMessage);
There are also plenty classes in Java 8, that make use of lambda expressions. One example would be the Optional class, which is explained here.
📚 Further Read
This tutorial only focuses on the absolute basics. For an in-depth introduction to lambda expressions, you can take a look at Oracle's article about lambda expressions.