Какое отличие между использованием лямбда-выражений и анонимных классов в Java?
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");
}
};
Лямбды предпочтительнее для простых случаев, анонимные классы — когда нужна более сложная логика или состояние.