Большое количество лямбд
я пишу игру на kotlin, и для удобства, рассматриваю вариант реализации квестов в виде лямбд.
val quests = ArrayList<Quest>()
Допустим, у нас есть квест, после выполнения которого происходит определённое событие. Если я сделаю нечто вроде подобного:
quests.add(Quest({ лямбда когда квест был взят }, { лямбда когда квест был завершен }))
Какие проблемы могли бы возникнуть, теоретически, если бы таких квестов было ооооочень много? Как я понял, на каждую лямбду создаётся класс? Есть ли проблемы, связанные с переизбытком классов?
Ответы (1 шт):
Во-первых, создание класса для лямбды в современном Kotlin происходит только при компиляции для JDK 1.6, при компиляции для JDK 1.8 и новее для лямбды создается лишь только функция, а экземпляр функционального типа создается с помощью инструкции invokedynamic, что избавляет от всех возможных проблем создания класса. Если вам все-таки нужно компилировать код для JDK 1.6, то единственная возможная проблема — это превышения лимита классов на некоторых платформах. Например, на Android в одном файле dex лимит в 65536 классов, который нужно специальным образом обходить.