Optional Parameters in Java 8 Lambda Expressions
Yeah, they don't really exist, but we can use polymorphism, method overloading and default methods instead to make it a bit more convenient to use our APIs.
As an example, here's an event bus implementation where I can register event handlers with an optional header parameter.
Bus bus = new Bus();
bus.register(event -> System.out.println("I gots an event"));
bus.register((event,header) -> System.out.println("I gots an event w/ header"));
Here are the dirty details on how you can do this (and - when dispatching - events, use default methods to avoid type coercion.