Нет, ванильная Java не имеет методов расширения. Тем не менее, Lombok добавляет много полезных функций - включая синтаксис методов расширения - благодаря его аннотациям и генерации байт-кода.
Вы можете использовать аннотации @ExtensionMethod для «преобразования» существующих статических методов в методы расширения. Первый параметр статических методов в основном становится this
. Например, это правильный Ломбок-расширенный код Java:
import lombok.experimental.ExtensionMethod;
@ExtensionMethod({java.util.Arrays.class, Extensions.class})
public class ExtensionMethodExample {
public String test() {
int[] intArray = {5, 3, 8, 2};
intArray.sort();
String iAmNull = null;
return iAmNull.or("hELlO, WORlD!".toTitleCase());
}
}
class Extensions {
public static <T> T or(T obj, T ifNull) {
return obj != null ? obj : ifNull;
}
public static String toTitleCase(String in) {
if (in.isEmpty()) return in;
return "" + Character.toTitleCase(in.charAt(0)) +
in.substring(1).toLowerCase();
}
}
Обратите внимание, что методы расширения Ломбок могут быть «прибегли» на нуль объектов - до тех пор, как статический метод является нулевым безопасным, NullPointerException
не будет сгенерировано , так как это в основном переведено на вызов статического метода. Да - это сводится к синтаксическому сахару, но я думаю, что это еще более читаемо, чем обычные вызовы статических методов.
Кроме того, вы можете использовать какой-либо другой язык JVM с совместимостью Java, если это нормально в вашем проекте. Например, Kotlin поставляется с extension methods functionality, а также некоторые полезные расширения, уже определенные в стандартной библиотеке. Вот Kotlin and Lombok comparison.
Не на Java. Однако не все довольны тем, что говорят в Scala. Поскольку это может затруднить читаемость, ремонтопригодность. Обычно он создает класс с функциями, такими как XxxUtils или Xxxs. Наследование имеет свои проблемы там (конечные классы, принудительная усталость старого кода, централизм = только одна точка расширения). –