Проверка компиляции и исправление ошибок в Kotlin‑программе

Код не компилируется: synchronized не является таким модификатором функции Kotlin, а reified требует inline. Здесь reified вообще не нужен, достаточно обычного generic.

Короткий ответ

Что ответить на собеседовании

Код не компилируется: synchronized не является таким модификатором функции Kotlin, а reified требует inline. Здесь reified вообще не нужен, достаточно обычного generic.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо выяснить, компилируется ли представленный фрагмент кода на Kotlin, и в случае ошибок привести его к корректному виду.

class Task(var id: Long, val name: String)

val numbers = mutableListOf(1, 3, 5)
val taskSet = HashSet<Task>()

fun main() {
    val firstTask = Task(1, "Задача")
    val secondTask = Task(1, "Задача")

    taskSet.add(firstTask)
    taskSet.add(secondTask)

    numbers.add(7)
    numbers.forEvery { item ->
        if (item == 3) {
            return@forEvery
        }
        println("$item")
    }

    println("tasks contains ${taskSet.size} elements")
    println("Done!")
}

synchronized fun <reified T> List<T>.forEvery(itemAction: (T) -> Unit) {
    this.reversed().forEach { itemAction(it) }
}

Ответ

Код не компилируется: synchronized не является таким модификатором функции Kotlin, а reified требует inline. Здесь reified вообще не нужен, достаточно обычного generic.

Исправление без ненужной синхронизации:

fun <T> List<T>.forEvery(itemAction: (T) -> Unit) {
    for (index in lastIndex downTo 0) itemAction(this[index])
}

Результат main: 7, 5, 1, затем tasks contains 2 elements и Done!. return@forEvery пропускает только обработку 3. Task — обычный класс без собственного equals/hashCode, поэтому два одинаково заполненных экземпляра остаются разными элементами HashSet. Если список совместно изменяется, нужна отдельная согласованная схема блокировки всех доступов.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее