Как extensions применяются в Java

«Как extensions применяются в Java» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java нет extensions в том виде, как в Kotlin, но аналогичную функциональность можно реализовать через:

  1. Статические методы в утилитных классах
public final class StringUtils {
    public static boolean isNullOrEmpty(String str) {
        return str == null || str.isEmpty();
    }
}

// Использование:
StringUtils.isNullOrEmpty(text);
  1. Декораторы – оборачивание объекта в другой класс
public class EnhancedList<T> {
    private final List<T> list;

    public EnhancedList(List<T> list) {
        this.list = list;
    }

    public T second() {
        return list.get(1);
    }
}
  1. Интерфейсы с default-методами (Java 8+)
public interface ListExtensions<T> extends List<T> {
    default T second() {
        return get(1);
    }
}

Основные отличия от Kotlin extensions:

  • Не синтаксический сахар (явный вызов методов)
  • Нет доступа к private-полям оригинального класса
  • Требуют явного создания оберток/наследования