Functional Interface در جاوا 8 راهی برای افزودن lambda expression به type system جاوا بوده است. برای این کار هر عبارت lambda باید معادل یک type در جاوا باشد که آن type یک interface است که به آن functional interface می گویند. یک functional interface باید حتما فقط شامل یک abstract method باشد (چون default method ها در جاوا 8 abstract نیستند می توانیم در یک functional interface چندین default method داشته باشیم). انوتیشن FunctionalInterface برای چک کردن معتبر بودن یک Functional Interface در زمان کامپایل است و در صورتی که یک Functional Interface بیش از یک متد abstract داشته باشد، کامپایلر جاوا خطا می دهد.
مثال:
@FunctionalInterface
interface Converter<F, T> {
T convert(F from);
}
interface بالا یک functional interface است و می توانیم lambda expression هایی مطابق با آن تعریف کنیم:
Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
Integer converted = converter.convert("123");
System.out.println(converted); // 123