Ответ
@Mutable — это аннотация в Kotlin, которая указывает, что класс или интерфейс может изменяться после создания. Она помогает разработчикам явно обозначать изменяемые структуры данных, улучшая читаемость и предсказуемость кода.
Пример:
@Mutable
data class User(
var name: String,
var age: Int
)
Здесь User — изменяемый класс (поля var). Аннотация сигнализирует, что его состояние может меняться.
Нюансы:
- Не встроена в Kotlin по умолчанию — часто используется кастомная аннотация или из библиотек (например,
@Mutableиз AndroidX). - Альтернатива —
@Immutableдля неизменяемых объектов. - Полезно в многопоточности, чтобы явно разделять изменяемые/неизменяемые данные.
Ответ 18+ 🔞
Слушай, вот есть в Котлине такая штука — @Mutable. Представь себе, ты пишешь код, а потом через полгода возвращаешься и нихуя не понимаешь, можно ли этот твой класс менять или нет. Так вот, эта аннотация — как кричащая красная табличка «ОСТОРОЖНО, ЗДЕСЬ МОЖЕТ ПОМЕНЯТЬСЯ!». Она явно говорит всем, кто читает твой код: «Чувак, этот класс — изменяемый, не удивляйся, если его состояние поплывёт».
Вот смотри, простой пример:
@Mutable
data class User(
var name: String,
var age: Int
)
Видишь? Класс User. Поля объявлены через var — значит, их можно перезаписывать. А сверху болтается @Mutable, чтобы ты, ёпта, с первого взгляда увидел: «Ага, тут данные могут мутировать, надо быть осторожнее, особенно если этот объект начнёт гулять между потоками».
Но есть нюансы, блядь:
- Эта аннотация не встроена в сам Котлин из коробки. То есть стандартной такой нет. Её либо сам пишешь (кастомную), либо тащишь из какой-нибудь библиотеки — например, из AndroidX. Так что не ищи её в стандартной поставке, зря голову ломать будешь.
- У неё есть логичная противоположность —
@Immutable. Это как инь и янь: один маркирует то, что можно менять, другой — то, что должно оставаться в покое, как скала. - Главная польза вылезает, когда начинается многопоточность. Представь: один поток меняет объект, а другой в это же время пытается его прочитать. Если объект помечен как
@Mutable, ты сразу понимаешь, что тут нужна синхронизация, блокировки или другие танцы с бубном, чтобы не получить неожиданный пиздец в рантайме. Это разделение на изменяемое и неизменяемое — основа для написания более предсказуемого и безопасного кода.
Короче, @Mutable — это не магия, а просто явный способ коммуникации между тобой-сегодняшним и тобой-через-полгода (или другим разработчиком). Чёткий сигнал: «Здесь ходить можно, но лёд тонкий, сука».