Большое количество лямбд

я пишу игру на kotlin, и для удобства, рассматриваю вариант реализации квестов в виде лямбд.

val quests = ArrayList<Quest>()

Допустим, у нас есть квест, после выполнения которого происходит определённое событие. Если я сделаю нечто вроде подобного:

quests.add(Quest({ лямбда когда квест был взят }, { лямбда когда квест был завершен }))

Какие проблемы могли бы возникнуть, теоретически, если бы таких квестов было ооооочень много? Как я понял, на каждую лямбду создаётся класс? Есть ли проблемы, связанные с переизбытком классов?


Ответы (1 шт):

Автор решения: Commander Tvis

Во-первых, создание класса для лямбды в современном Kotlin происходит только при компиляции для JDK 1.6, при компиляции для JDK 1.8 и новее для лямбды создается лишь только функция, а экземпляр функционального типа создается с помощью инструкции invokedynamic, что избавляет от всех возможных проблем создания класса. Если вам все-таки нужно компилировать код для JDK 1.6, то единственная возможная проблема — это превышения лимита классов на некоторых платформах. Например, на Android в одном файле dex лимит в 65536 классов, который нужно специальным образом обходить.

→ Ссылка