← Назад к вопросам
Что такое Mutable-аннотация?
2.0 Middle🔥 141 комментариев
#JVM и память#Kotlin основы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое Mutable-аннотация?
@Mutable — это аннотация из пакета kotlin.jvm.internal, которая помечает типы как изменяемые (mutable). Это инструмент для работы с типом-безопасностью и явного указания о мутируемости объектов.
Назначение и использование
@Mutable используется для:
- Явного указания на то, что объект может быть изменён
- Документирования контрактов функций и параметров
- Информирования разработчиков и инструментов анализа о потенциальных изменениях состояния
- Улучшения read-only гарантий в Kotlin коде
Практические примеры
// Аннотация указывает, что коллекция может быть изменена
fun processUsers(@Mutable users: MutableList<User>) {
users.add(User("John", 30))
users.removeAt(0)
}
// Без аннотации код менее явный
fun modifyList(list: MutableList<String>) {
list.add("item")
}
// В контексте Android — часто с данными
class UserViewModel {
@Mutable
private val _users = mutableListOf<User>()
val users: List<User> = _users
}
Связь с immutability в Kotlin
Kotlin различает:
- val — переменная (но не объект) неизменяемая
- var — переменная изменяемая
- List<T> — read-only интерфейс
- MutableList<T> — интерфейс, позволяющий изменения
val immutableRef: List<String> = mutableListOf("A", "B")
// immutableRef.add("C") — ошибка: List не имеет add()
val mutableRef: MutableList<String> = mutableListOf("X", "Y")
mutableRef.add("Z") // OK
@Mutable в контексте функциональности
// Функция явно говорит, что будет мутировать параметр
fun updateUserList(
@Mutable users: MutableList<User>,
newUser: User
) {
users.add(newUser)
users.sortBy { it.name }
}
// Вызывающий код понимает, что список изменится
val myUsers = mutableListOf(User("Alice", 25))
updateUserList(myUsers, User("Bob", 30))
// myUsers теперь содержит двух пользователей, отсортированных по имени
Почему это важно в Android
- Предсказуемость — читая сигнатуру функции, ясно, будет ли изменён объект
- Безопасность потоков — помогает выявить места, где нужна синхронизация
- Удобство рефакторинга — IDE может предупредить об изменении мутируемых объектов
- Лучшая документация — код становится более самодокументирующимся
@Mutable — это не самая распространённая аннотация, но полезна в больших проектах для явной коммуникации о мутациях состояния. Современная практика предпочитает использовать read-only типы и StateFlow/LiveData для управления изменяемым состоянием в Android.