Выбор ответа Senior Java-интероп обновлено
Read-only List и Java-код
Вопрос
Kotlin передаёт val items: List<String> = mutableListOf("a") в Java-метод, который делает list.add("b"). Что произойдёт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Элемент добавится: для Java это обычный java.util.List. В байткоде List и MutableList это один и тот же java.util.List.
Варианты ответа
- Элемент добавится: для Java это обычный
java.util.Listправильный ответ - Ошибка компиляции в Java: метод ждёт изменяемый список
UnsupportedOperationException: Kotlin передаёт read-only обёртку- Java получит копию списка, и
itemsостанется["a"]
Разбор
В байткоде List и MutableList это один и тот же java.util.List. Read-only ограничение существует только для компилятора Kotlin. Под ссылкой лежит ArrayList, поэтому Java-код его изменит. UnsupportedOperationException был бы для неизменяемой реализации вроде listOf("a") с одним элементом или Collections.unmodifiableList. Копии при передаче не делается.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.