In Java, a functional interface is an interface that has a single abstract method. A functional interface can be used as the target type of a lambda expression or method reference.
A generic functional interface is a functional interface that has a single abstract method with generic type parameters. A generic functional interface can be used to represent a function that takes one or more arguments of a specific type and returns a value of a specific type.
Here's an example of a generic functional interface in Java:
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
}
This interface defines a function that takes an argument of type T and returns a value of type R. The @FunctionalInterface annotation indicates that this is a functional interface.
You can use the Function interface as the target type of a lambda expression or method reference as follows:
Function<Integer, String> intToString = i -> i.toString();
System.out.println(intToString.apply(123)); // prints "123"
Function<String, Integer> stringToInt = Integer::parseInt;
System.out.println(stringToInt.apply("456")); // prints "456"
In this example, the intToString variable is assigned a lambda expression that converts an integer to a string, and the stringToInt variable is assigned a method reference that converts a string to an integer. The apply() method of the Function interface is used to apply the function to the given argument.