---
title: "Kotlin 2.5 引入实验性 companion 块与扩展：伴生机制补强跨平台互操作 - Angryecho"
description: "JetBrains 在 Kotlin 官方博客介绍：自 Kotlin 2.5.0 起，可用实验性的 companion 块（companion block）与 companion 扩展（companion extension），在保留 companion object 的同时，补一类更接近静态成员的写法，并改善多平台…"
canonical_url: "https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke/p/P2TBBpqUC4bdj02QhIap6"
meta:
  "og:description": "JetBrains 在 Kotlin 官方博客介绍：自 Kotlin 2.5.0 起，可用实验性的 companion 块（companion block）与 companion 扩展（companion extension），在保留 companion object 的同时，补一类更接近静态成员的写法，并改善多平台…"
  "og:image": "https://www.angryecho.com/_og/d/c_Post%2Ctitle_~5ZCQ5qe9572R%2Cdescription_~5ZCQ5qe95LiA5LiL77yM5bCx5LiK5ZCQ5qe9572R44CC%2CpostId_P2TBBpqUC4bdj02QhIap6%2Crevision_~MjAyNi0xMS0wMVQwMjo1NTo1Ny40MDAxNzda%2Cp_Ii9jL0tvdGxpbnpob25nX3dlbl9ib19rZS9wL1AyVEJCcHFVQzRiZGowMlFoSWFwNiI%2Cs_Va__tk-qeCqinKrJ.png"
  "og:image:height": "630"
  "og:image:type": image/png
  "og:image:width": "1200"
  "og:title": "Kotlin 2.5 引入实验性 companion 块与扩展：伴生机制补强跨平台互操作"
---

> Index of every page on this site: [llms.txt](https://www.angryecho.com/llms.txt)

# **Kotlin 2.5 引入实验性 companion 块与扩展：伴生机制补强跨平台互操作**

JetBrains 在 Kotlin 官方博客介绍：自 Kotlin 2.5.0 起，可用实验性的 companion 块（companion block）与 companion 扩展（companion extension），在保留 companion object 的同时，补一类更接近静态成员的写法，并改善多平台互操作。\[1]

## companion 块长什么样

许多语言都有「属于类型本身、不属于某个实例」的成员：常量、工厂、工具方法。Kotlin 以往主要靠 companion object。2.5 起也可以写成 companion 块，语法接近，但编译策略不同：\[1]

```kotlin
data class Vector(val x: Double, val y: Double) {
  companion {
    val ZERO = Vector(0.0, 0.0)
  }
}
```

还可以用 companion 扩展，给自己并不掌控的类型追加「类级」成员，例如：

```kotlin
companion fun Vector.unit(angle: Double) = Vector(cos(angle), sin(angle))
```

官方说明，设计目标之一是突破 companion object 的限制：扩展可作用在任意类或接口上——不论是否由你定义、是否来自 Java、原先有没有 companion object。编译上更接近其他平台的静态成员；在 JVM 上 companion 块会编译为静态成员。对 Kotlin Multiplatform，可以声明 expected companion 块成员，再用带静态成员的 Java 类做 actual。\[1]

## 怎么启用、和 object 什么关系

companion 块与扩展自 Kotlin 2.5.0-Beta1 起以实验特性提供，需额外编译器开关：`-Xcompanion-blocks` 仅开块；`-Xcompanion-blocks-and-extensions` 同时开扩展。启用扩展会使编译器产出预发布二进制，在特性稳定前，依赖方可能无法正常消费这类库；仅暴露 companion 块不受同一限制，但消费方仍需打开 companion blocks 特性。\[1]

博客也回答「还要不要 companion object」：多数原先放进 companion object 的用法，新代码可以优先考虑 companion 块；但若伴生需要实现某个接口，仍只能用 companion object，因为它会编译成完整类。官方明确：companion object 仍是语言组成部分，支持有保障，不必强制迁移；若迁移，多数情况去掉 `object` 关键字即可，项目及依赖方需重新编译，生态工具链也还在跟进。\[1]

更细的语言设计见对应 KEEP 提案；是否在业务项目启用，按实验特性风险自行评估。\[1]

## 来源

> \[1] [The Companions to Come](https://blog.jetbrains.com/kotlin/2026/10/the-companions-to-come/)，JetBrains Kotlin Blog，Alejandro Serrano Mena，2026年10月。查询日期：2026-10-27。

#Kotlin #Kotlin2.5 #companion #JetBrains #多平台

排序方式 :

### **成为第一条评论！**

Nobody's responded to this post yet. Add your thoughts and get the conversation going.

```json
{"@context":"https://schema.org","@graph":[{"@id":"https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke/p/P2TBBpqUC4bdj02QhIap6#post","@type":"DiscussionForumPosting","commentCount":0,"dateModified":"2026-11-01T02:55:57.400Z","datePublished":"2026-10-20T04:00:00.000Z","description":"JetBrains 在 Kotlin 官方博客介绍：自 Kotlin 2.5.0 起，可用实验性的 companion 块（companion block）与 companion 扩展（companion extension），在保留 companion object 的同时，补一类更接近静态成员的写法，并改善多平台…","headline":"Kotlin 2.5 引入实验性 companion 块与扩展：伴生机制补强跨平台互操作","isPartOf":"https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke","mainEntityOfPage":"https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke/p/P2TBBpqUC4bdj02QhIap6","text":"JetBrains 在 Kotlin 官方博客介绍：自 Kotlin 2.5.0 起，可用实验性的 companion 块（companion block）与 companion 扩展（companion extension），在保留 companion object 的同时，补一类更接近静态成员的写法，并改善多平台互操作。[1]\n\ncompanion 块长什么样\n\n许多语言都有「属于类型本身、不属于某个实例」的成员：常量、工厂、工具方法。Kotlin 以往主要靠 companion object。2.5 起也可以写成 companion 块，语法接近，但编译策略不同：[1]\n\ndata class Vector(val x: Double, val y: Double) {\n  companion {\n    val ZERO = Vector(0.0, 0.0)\n  }\n}\n\n还可以用 companion 扩展，给自己并不掌控的类型追加「类级」成员，例如：\n\ncompanion fun Vector.unit(angle: Double) = Vector(cos(angle), sin(angle))\n\n官方说明，设计目标之一是突破 companion object 的限制：扩展可作用在任意类或接口上——不论是否由你定义、是否来自 Java、原先有没有 companion object。编译上更接近其他平台的静态成员；在 JVM 上 companion 块会编译为静态成员。对 Kotlin Multiplatform，可以声明 expected companion 块成员，再用带静态成员的 Java 类做 actual。[1]\n\n怎么启用、和 object 什么关系\n\ncompanion 块与扩展自 Kotlin 2.5.0-Beta1 起以实验特性提供，需额外编译器开关：-Xcompanion-blocks 仅开块；-Xcompanion-blocks-and-extensions 同时开扩展。启用扩展会使编译器产出预发布二进制，在特性稳定前，依赖方可能无法正常消费这类库；仅暴露 companion 块不受同一限制，但消费方仍需打开 companion blocks 特性。[1]\n\n博客也回答「还要不要 companion object」：多数原先放进 companion object 的用法，新代码可以优先考虑 companion 块；但若伴生需要实现某个接口，仍只能用 companion object，因为它会编译成完整类。官方明确：companion object 仍是语言组成部分，支持有保障，不必强制迁移；若迁移，多数情况去掉 object 关键字即可，项目及依赖方需重新编译，生态工具链也还在跟进。[1]\n\n更细的语言设计见对应 KEEP 提案；是否在业务项目启用，按实验特性风险自行评估。[1]\n\n来源\n\n\n\n[1] The Companions to Come，JetBrains Kotlin Blog，Alejandro Serrano Mena，2026年10月。查询日期：2026-10-27。\n\n#Kotlin #Kotlin2.5 #companion #JetBrains #多平台","url":"https://www.angryecho.com/c/Kotlinzhong_wen_bo_ke/p/P2TBBpqUC4bdj02QhIap6","author":{"@type":"Person","name":"cencents","url":"https://www.angryecho.com/u/V2Xcencents"},"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/DislikeAction","userInteractionCount":0},{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":0}]}]}
```

## Sitemap

See the full [sitemap](https://www.angryecho.com/sitemap.md) for all pages.
