Рубрика: Kotlin
-
Что такое object? Потокобезопасен ли он? Какие еще есть реализации синглтона?
Ответы: Что такое object? object — это ключевое слово в Kotlin, которое используется для создания синглтона, то есть объекта, который существует в единственном экземпляре на протяжении всей программы. object также используется для создания анонимных объектов, например, при реализации интерфейсов на месте. object можно использовать для создания компаньон-объекта внутри класса. Компаньон-объект является аналогом статических членов в…
-
Можно использовать var поля в data class-е? Что будет, если использовать data class с var полем, например, в качестве ключа хэшмапы?
Ответ: Можно, но не надо) Использование var в data class возможно, это не всегда хорошая идея, особенно в контексте использования этих объектов в качестве ключей в хэш-таблицах или других коллекциях, которые полагаются на неизменность объектов для правильной работы. Если свойства объекта могут изменяться, это может привести к неожиданным ошибкам, нарушению целостности данных и некорректному поведению…
-
Можно ли наследоваться от data class-а? Почему?
Ответ: Нельзя. В Kotlin нельзя наследоваться от data class-а, и это связано с особенностями их проектирования и автоматической генерацией методов. Data class-ы автоматически генерируют методы equals(), hashCode(), toString() и copy(), которые зависят от свойств, объявленных в первичном конструкторе. Если бы наследование от Data class-а было разрешено, это могло бы привести к сложностям с поддержкой этих…
-
Можно ли на корутинах получить дедлок?
Ответ: Да, можно. Если есть корутины, которые взаимозависимы от результатов друг друга и блокируют друг друга, то дедлок возможен. Как их избежать:
-
Участвуют ли в генерации методов data class поля из body? Можно ли выпилить из генерации поле из конструктора?
Ответ: Нет. В Kotlin только свойства, объявленные в первичном конструкторе дата-класса, участвуют в генерации методов equals(), hashCode(), toString(), copy() и компонентных функций (component1(), component2() и т.д.). Свойства, объявленные в теле класса (body), не участвуют в этих автоматически сгенерированных методах. Таким образом, вы можете исключить поле из генерации методов, объявив его в теле класса, а не…
-
Зачем нужны data class-ы в Kotlin? Чем отличаются от обычных классов?
Ответ: Чаще всего(!) нужны для уменьшения бойлерплейт кода при создании классов, которые будут использоваться для хранения данных. Внимание: именно «чаще всего», а не «только для» =) Автоматическая генерация методов equals(), hashCode(), toString() и copy() избавляет от необходимости вручную писать бойлерплейт код, что позволяет сосредоточиться на логике приложения. Также, их используют когда нужно сделать копирование объекта.…
-
Вопросы для Android-собесов
Приуэт! Давно ничего не писал) Это вопросы для собесов, по которым я сам готовлюсь. Список обновляется и улучшается. Также будут посты с ответами, по каждому из вопросов. Вопросы я составляю так, чтобы можно было сразу копипастнуть Гуглу или ЧатГопоте(ChatGPT) и получить более подробный ответ =) Android Kotlin Coroutines Java, JVM, JMM Collections Concurrency Architecture, general…
-
Что такое Flow
Flow — это упакованный в объект фрагмент кода, который производит какой-то последовательный набор элементов (данных). С одной стороны есть условный Отправитель, который этот код создал и готов предоставить его в виде Flow обертки. А с другой стороны есть Получатель, который возьмет этот Flow, запустит его и предоставит ему специальный колбэк, куда Flow будет складывать данные,…
-
Обработка ошибок в Корутинах
Обработка ошибок в Корутинах всегда вызывала затруднения у многих разработчиков по ряду причин. Мало того, что существует несколько способов их обработки, но в первую очередь необходимо понять механизм распространения ошибок, который идет со структурированным параллелизмом(structered concurrency). И есть множество ситуаций, когда распространение ошибок с помощью Корутин происходит по-разному, например: Ошибки, возникающие в Scope-ах с CoroutineExceptionHandler…
-
Dispatchers
DefaultЕсли корутина не находит в своем контексте диспетчер, то она использует диспетчер по умолчанию. Этот диспетчер представляет собой пул потоков. Количество потоков равно количеству ядер процессора. Он не подходит для IO операций, но сгодится для интенсивных вычислений. IOИспользует тот же пул потоков, что и диспетчер по умолчанию. Но его лимит на потоки равен 64 (или…