Functional Interfaces in Java

This lesson explains the concept of functional interfaces which were introduced in Java 8.

What are functional interfaces?

An interface that has a single abstract method is called a functional interface.

While an interface can have one or more default methods, it should have only one abstract method to be called a functional interface.

Java 8 has defined the java.util.function package, containing lots of functional interfaces. Some of the functional interfaces defined in Java 8 are Predicate, Consumer, Supplier, Function, etc.

The functional interface is used by lambda expressions. In the next chapter, we will discuss lambdas and also see the usage of some of the functional interfaces in Java 8.

What is @FunctionalInterface annotation?

Any interface that has only one abstract method can be annotated with the @FunctionalInterface annotation.

This is not mandatory but if an interface is annotated with @FunctionalInterface annotation and someone tries to add another abstract method to the interface, then the compiler will throw an error. Below is an example of a functional interface.

Press + to interact
@FunctionalInterface
public interface Functional {
void doSomething();
default void foo() {
System.out.println("foo");
}
}

If we try to add one more abstract method in the above interface, the compiler shows an error. If an interface is annotated with @FunctionalInterface annotation but does not contain even a single abstract method, then also the compiler will complain.

1

Is it necessary to declare a functional interface with @FunctionalInterface annotation?

A)

Yes

B)

No

Question 1 of 30 attempted

That is all about interfaces for now. In the next chapter, we will start exploring lambdas.

Create a free account to view this lesson.

Continue your learning journey with a 14-day free trial.

By signing up, you agree to Educative's Terms of Service and Privacy Policy