30/09/2026 · VietTechies · Biên tập

JetBrains vừa công bố chi tiết về những cải tiến sắp tới cho cơ chế companion trong Kotlin, bắt đầu từ phiên bản 2.5.0. Các bản cập nhật này giới thiệu tính năng thử nghiệm companion block và companion extension, được thiết kế nhằm tối ưu hóa quá trình biên dịch các thành viên tĩnh và mở rộng khả năng tương thích trong các dự án đa nền tảng (multiplatform).
Companion Block và Biên Dịch Tĩnh
Trước đây, Kotlin dựa vào companion object để xử lý các chức năng ở cấp lớp như factory method, tiện ích và hằng số. Bắt đầu từ Kotlin 2.5.0, các nhà phát triển có thể sử dụng cú pháp companion block thay thế. Dù cú pháp tương tự companion object, companion block làm thay đổi hoàn toàn cách mã nguồn được biên dịch. Trên môi trường JVM, companion block được biên dịch trực tiếp thành các thành viên tĩnh (static members) thay vì tạo ra một thể hiện companion object trung gian. Sự thay đổi này giúp các nhà phát triển dự án Kotlin Multiplatform có thể khai báo các thành viên kỳ vọng (expected) của companion block trong phần mã chung và triển khai thực tế (actual) chúng bằng các lớp Java tiêu chuẩn chứa thành viên tĩnh.
Mở Rộng Các Lớp Hiện Có Bằng Companion Extension
Kotlin 2.5.0 cũng giới thiệu tính năng thử nghiệm companion extension, cho phép lập trình viên khai báo các thành viên dạng tĩnh mới trên các lớp hoặc giao diện hiện có. Tính năng này hoạt động bất kể kiểu dữ liệu đích ban đầu được viết bằng Kotlin hay Java, cũng như việc nó đã có sẵn companion object hay chưa.
Cờ Biên Dịch Và Giới Hạn Tương Thích
Cả hai tính năng trên đều đang ở giai đoạn thử nghiệm và yêu cầu bật các cờ biên dịch cụ thể. Nhà phát triển có thể bật companion block bằng cờ `-Xcompanion-blocks`, trong khi để bật extension sẽ cần cờ `-Xcompanion-blocks-and-extensions`. Việc sử dụng companion extension sẽ khiến trình biên dịch tạo ra các tệp nhị phân bản phát hành thử nghiệm (pre-release), khiến các thư viện sử dụng chúng không thể được tiêu thụ như một phụ thuộc ổn định cho đến khi tính năng này đạt mức chính thức.
Các companion object hiện có vẫn được hỗ trợ hoàn toàn và tiếp tục cần thiết trong các kịch bản mà companion phải triển khai một giao diện cụ thể, vì companion block không tạo ra một thể hiện lớp riêng biệt. JetBrains khẳng định các dự án hiện tại không bắt buộc phải chuyển đổi mã nguồn, mặc dù việc xóa từ khóa `object` sẽ chuyển đổi các companion object tiêu chuẩn thành companion block sau khi biên dịch lại.
Ảnh minh họa do AI tạo, không phải ảnh tư liệu.
Nguồn: The Companions to Come
