上手Kotlin 2.5.0-Beta2:升级版本、打开companion块和完整value class,KMP库试用.kar格式

Kotlin 2.5.0-Beta2于10月21日发布,是2.5.0正式版之前的预览版本。[1] 这一版把名称解构等几项特性转为稳定,还加入了companion扩展和companion块、完整value class等实验特性,Swift export进入Beta,KMP库多了一种更省空间的发布格式。[1] 下面按官方文档整理在自己项目里试用的步骤,适合想提前评估新特性的Kotlin开发者;Beta版不建议直接用于生产。

准备工作

  • 把IntelliJ IDEA或Android Studio更新到最新版本,官方说明最新版Kotlin已包含在其中。[1]

  • 运行编译器的JDK升级到17或以上。2.5.0-Beta2开始,用低于JDK 17的环境运行编译器会直接报错。[1]

  • 建议新建分支或单独的试验项目,方便回退。

操作步骤

1、把Kotlin版本改成2.5.0-Beta2

在构建脚本里把Kotlin版本改为2.5.0-Beta2。[1] 以Gradle Kotlin DSL的JVM项目为例:

plugins {
    kotlin("jvm") version "2.5.0-Beta2"
}

为什么:新特性和编译器行为都绑定在这个版本上。确认成功:Gradle同步和编译通过,没有出现JDK版本相关的报错。如果暂时无法升级JDK,官方提供了-Xallow-pre-17-runtime-jdk临时跳过,但会在2.5.20或2.6.0移除。[1]

2、打开companion扩展和companion块

这项特性让你不用先写companion object,也能声明通过类型名访问的函数和属性。它是实验特性,需要加编译选项:[1]

kotlin {
    compilerOptions {
        freeCompilerArgs.add("-Xcompanion-blocks-and-extensions")
    }
}

然后用官方示例验证:[1]

companion val Vector.UnitX get() = Vector(1.0, 0.0)

data class Vector(val x: Double, val y: Double) {
    companion {
        val Zero: Vector get() = Vector(0.0, 0.0)
    }
}

fun main() {
    println(Vector.UnitX) // Vector(x=1.0, y=0.0)
    println(Vector.Zero)  // Vector(x=0.0, y=0.0)
}

为什么:在JVM上,这些声明会直接生成静态成员,不用再加@JvmStatic。[1] 确认成功:程序输出和注释里的结果一致。

3、试用完整value class

以前的value class只能包一个值。完整value class允许多个属性,实例只看值、不看引用身份。同样需要编译选项-Xfull-value-classes,写法和上一步相同。[1]

value class Complex(val real: Double, val imaginary: Double)

为什么:编译器会像data class一样自动生成equals()、hashCode()、toString(),但没有componentN()和copy()。[1] 确认成功:打印一个Complex实例能看到自动生成的toString()结果,两个属性值相同的实例用==比较为true。

4、(KMP库作者)试用.kar发布格式

新格式把除JVM和Android外的平台产物打成一个.kar归档(ZIP再经XZ压缩),用来应对Maven Central的发布体积限制。[1] 在单个模块启用:

kotlin {
    publishing {
        publicationFormat.set(KotlinPublicationFormat.KOTLIN_ARCHIVE)
    }
}

或在gradle.properties里对全项目启用:kotlin.publicationFormat=KOTLIN_ARCHIVE。[1] 为什么:官方举例,cryptography-kotlin库的发布产物从7539个文件、91MB降到1036个文件、23MB。[1] 确认成功:本地发布后,产物目录里出现.kar文件、文件数明显减少。这一项只影响库作者,应用开发者不需要改。

注意事项

  • 以后普通value class将不再自动视为inline。2.5.20会对没有标注的单字段value class给出警告,现有代码可以提前用@JvmInline或inline修饰符标明。[1]

  • Swift export进入Beta,入口从swiftExport {}改为export { swift {} },flattenPackage改名为rootPackage,iOS项目升级时要同步改构建脚本。[1]

  • 类型推断做了性能优化,个别复杂泛型代码可能推断出不同类型或选中不同重载,升级后要跑一遍测试。[1]

  • 实验特性的语法和行为在正式版前仍可能变化,遇到问题可以到YouTrack反馈。[1]

说明:以上步骤依据Kotlin官方“What's new in Kotlin 2.5.0-Beta2”文档整理,于2026年10月25日核实。

来源

[1] What's new in Kotlin 2.5.0-Beta2(Kotlin官方文档),2026年10月21日发布。

#Kotlin #Kotlin2.5 #KotlinMultiplatform #valueclass #SwiftExport #Gradle #编程教程

排序方式 :

成为第一条评论!

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