Ответ
Для избежания создания объектов типа function можно использовать лямбда-выражения или ссылки на методы. В Kotlin лямбды компилируются в анонимные классы, но с оптимизацией inline-функций можно избежать создания объектов.
inline fun doSomething(action: () -> Unit) {
action()
}
// Использование (не создаст объект function)
doSomething { println("No function object") }
В Java 8+ используйте лямбды или method references:
Runnable r = () -> System.out.println("Lambda");
Runnable r2 = System.out::println; // Method reference
Для OnClickListener в Android:
button.setOnClickListener { /* Лямбда без объекта */ }
Ключевое:
inlineв Kotlin исключает объекты- Лямбды и method references в Java/Kotlin оптимизируются
- Избегайте анонимных классов (
new Runnable() {...})