Программирование и разработка программного обеспечения

Kotlin готовит замену части случаев использования Companion Objects с помощью нового механизма

Экспериментальная Kotlin 2.5.0 добавляет механизмы Companion Blocks и Companion Extensions для расширения определения членов, связанных с типами, и улучшения совместимости между платформами. JetBrains подчёркивает, что Companion Objects останутся поддерживаемыми, однако предупреждает о необходимости повторной компиляции, а также о совместимости библиотек и инструментов.

2026-09-30
3 мин. чтения
15 просмотров
certi.news Editorial Team
Kotlin готовит замену части случаев использования Companion Objects с помощью нового механизма

JetBrains тестирует в Kotlin 2.5.0 два новых механизма под названиями Companion Blocks и Companion Extensions, направленных на расширение способов определения членов, связанных с типом, и улучшение взаимодействия между различными платформами Kotlin. Компания заявляет, что новый дизайн открывает программные модели, которые было непросто реализовать с помощью традиционных Companion Objects.

Что добавляет новый механизм?

Члены, связанные с типом, используются для определения констант, инструментов и функций-конструкторов, которые не принадлежат отдельному объекту, например константы, представляющей нулевой вектор, или функции, создающей вектор под заданным углом. Ранее такой подход основывался на Companion Objects, тогда как новые блоки-компаньоны позволяют записывать такие члены в синтаксисе, более близком к их определению внутри самого типа.

Companion Extensions позволяют добавлять связанные члены к любому классу или интерфейсу, даже если разработчик не владеет исходным кодом и даже если тип пришёл из Java или изначально не содержит Companion Object. Это означает возможность расширять внешние типы без изменения их базового определения.

Изменения в компиляции и совместимости

Новый механизм отличается от Companion Objects стратегией компиляции. На платформе JVM Companion Blocks компилируются в static-члены, что приближает их поведение к статическим членам на других платформах. JetBrains считает, что это может быть полезно для Kotlin Multiplatform, поскольку ожидаемые члены можно определить в блоке-компаньоне, а затем реализовать с помощью класса Java, содержащего static-члены.

Однако функции всё ещё являются экспериментальными. Для включения Companion Blocks требуется параметр -Xcompanion-blocks, а для совместного использования блоков и расширений — параметр -Xcompanion-blocks-and-extensions.

Ограничения экспериментального использования

При использовании Companion Extensions компилятор создаёт двоичные файлы предварительной версии. Поэтому другие проекты или библиотеки могут не суметь использовать библиотеки с такими расширениями в качестве зависимостей до тех пор, пока функция официально не стабилизируется. Это ограничение не распространяется на публикацию Companion Blocks, однако их пользователям также потребуется включить функцию.

Нужно ли переносить Companion Objects?

JetBrains не рекомендует немедленную миграцию. Companion Objects по-прежнему остаются важной частью Kotlin, и их полная поддержка гарантирована. Companion Blocks могут быть предпочтительным вариантом для нового кода в большинстве случаев, однако Companion Objects всё ещё необходимы в определённых ситуациях, например когда компаньону требуется реализовать интерфейс, поскольку они компилируются в полноценный класс.

На практике во многих случаях может быть достаточно удалить слово object, чтобы перейти к Companion Block, однако проект и весь зависящий от него код потребуется перекомпилировать. JetBrains также предупреждает, что некоторые инструменты экосистемы могут пока быть не готовы работать с новым синтаксисом.

Почему это развитие важно?

Изменение важно для разработчиков Kotlin Multiplatform и авторов библиотек, поскольку оно призвано сократить разрыв между концепцией статических членов в JVM и на других платформах. Однако его практическая ценность сейчас по-прежнему связана с экспериментальным этапом и скоростью обновления инструментов сборки, библиотек и редакторов. Поэтому Companion Blocks выглядят подходящими для экспериментов и оценки дизайна, но не в качестве безопасной основы для масштабной миграции до стабилизации функции.

Источник новости
c
Автор

certi.news Editorial Team

В той же категории

Вам также может понравиться

Все новости