В таких языках программирования, как C#, Kotlin, Groovy, Scala есть возможность расширять класс путем добавления нового функционала, при этом не требуется наследование или изменение самого изначального класса. Это реализовано с помощью специальных выражений, называемых расширения. Java, в отличие от этих языков, не имеет такой возможности из коробки и даже не планирует в ближайших релизах. Благодаря Lombok это стало возможным. Методы расширения были реализованы в Lombok еще 8 лет назад (с поддержкой Eclipse), но для многих все упиралось в поддержку плагином в IDEA (код компилировался, но IDE его не распознавала как валидный). Lombok плагин теперь предустановлен в IDEA 2021.1 EAP, и теперь он поддерживает методы расширения lombok (спасибо Anna Kozlova, Tagir Valeev, NekoCaffeine и Michail Plushnikov).
Рассмотрим пример классического статического импорта:
import static org.apache.commons.lang3.StringUtils.capitalize;
public class ExtensionMethods {
public static void main(String[] args) {
String str = "test";
String capitalized = capitalize(str);
// "Test"
System.out.println(capitalized);
}
}
при переходе на метод расширения код станет выглядеть так:
import lombok.experimental.ExtensionMethod;
import org.apache.commons.lang3.StringUtils;
@ExtensionMethod(StringUtils.class)
public class ExtensionMethods {
public static void main(String[] args) {
String str = "test";
String capitalized = str.capitalize();
// "Test"
System.out.println(capitalized);
}
}