Sobes.tech
Back to questions
Junior — Middle
61

Какое отличие между использованием лямбда-выражений и анонимных классов в Java?

Companies where asked
AstonAston

Answer from AI

sobes.tech AI

Лямбда-выражения и анонимные классы в Java используются для создания функциональных объектов, но имеют несколько ключевых отличий:

  • Синтаксис и краткость: Лямбда-выражения более компактны и читаемы, особенно для простых функций. Анонимные классы требуют более развернутого синтаксиса.

  • Тип: Лямбда-выражения реализуют функциональные интерфейсы (интерфейсы с одним абстрактным методом). Анонимные классы могут реализовывать интерфейсы с несколькими методами или наследовать классы.

  • Область видимости: В лямбдах доступ к локальным переменным только для чтения (effectively final), а в анонимных классах можно иметь собственные поля и методы.

  • Контекст this: В лямбда-выражениях this ссылается на внешний класс, а в анонимных классах — на сам анонимный класс.

Пример:

Runnable r1 = () -> System.out.println("Hello from lambda");

Runnable r2 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello from anonymous class");
    }
};

Лямбды предпочтительнее для простых случаев, анонимные классы — когда нужна более сложная логика или состояние.