Java завжди була об'єктно-орієнтованою мовою програмування. А це означає, що все обертається навколо об'єктів (за винятком деяких примітивних типів). Будь-які методи і функції в Java є частиною класу, тому ми повинні використовувати клас / об'єкт для виклику будь-якої функції. Так що ж в цей гармонійний світ привнесла Java 8?
Але об'єктно-орієнтованість мови не є його недоліком, однак тягне за собою написання багато службового коду. Наприклад, нам треба створити екземпляр Runnable. Зазвичай в Java ми робимо це за допомогою анонімних класів, як показано нижче:
Зверніть увагу, нам потрібно лише те, що знаходиться всередині методу run (). Решта код є лише описовою частиною, особливістю написання коду на Java.
Що пропонує нам Java 8?
Java 8 вводить таке поняття, як функціональні інтерфейси і лямбда-вирази, які покликані спростити і максимально очистити програму від марного коду.
функціональні інтерфейси
Інтерфейс з одним абстрактним методом називається функціональним інтерфейсом. Щоб відзначити інтерфейс як функціональний, використовується анотація @FunctionalInterface. Вона не є обов'язковою, але її використання вважається хорошим тоном програмування на Java 8. Також ця анотація допомагає уникнути випадкового додавання додаткових методів.
Основною перевагою функціонального інтерфейсу є те, що ми можемо використовувати лямбда-вирази для створення екземпляра і, як наслідок, уникнути використання громіздких реалізацій анонімного класу.
Кращим прикладом функціонального інтерфейсу є інтерфейс java.lang.Runnable з одним абстрактним методом r un ().
А тепер давайте розглянемо деякі рекомендації по використанню функціональних інтерфейсів: