Functional interfaces
Java treats lambdas as an instance of an interface type. It formalizes this into something it calls functional interfaces. A functional interface is just an interface with a single method. Java calls the method a "functional method" but the name "single abstract method" or SAM is often used.
All the existing single method interfaces like Runnable
and Callable
in the JDK are now functional interfaces and lambdas can be used anywhere a single abstract method interface is used. In fact, it's functional interfaces that allow for what's called target typing; they provide enough information for the compiler to infer argument and return types.
@FunctionalInterface
Oracle have introduced a new annotation @FunctionalInterface
to mark an interface as such. It's basically to communicate intent but also allows the compiler to do some additional checks.
For example, this interface compiles:
public interface FunctionalInterfaceExample { // compiles...