You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中value class与inline class的区别及@JvmInline作用是什么?

Kotlin中inline class与value class的常见问题解答

1. inline class和value class的核心区别

  • inline class是Kotlin 1.3版本推出的实验性特性,目前已经被官方废弃,不再推荐使用。
  • value class是Kotlin 1.5版本推出的稳定特性,作为inline class的替代方案,继承了inline class的所有能力同时扩展了多平台兼容性。
  • 语法差异:旧版inline class直接用inline class 类名(...)声明,新版value class默认用value class 类名(...)声明,JVM平台需要开启内联优化时额外添加@JvmInline注解即可。

2. 非JVM平台的value class是否默认是隐式inline class?

是的。在JS、Native等非JVM目标平台,value class默认会自动启用内联优化,不需要添加任何平台专属注解,效果等同于JVM平台加了@JvmInline注解的value class。

3. 非inline value class的定义

非inline value class特指JVM平台下没有添加@JvmInline注解的value class:

  • 它仍然需要遵守value class的所有语义约束:主构造器有且仅有一个只读属性,不能定义init代码块,不能声明后备字段,只能实现接口不能继承其他类等。
  • 编译时不会触发内联优化,会被编译为普通的final类,运行时会保留类的包装结构。

4. JVM平台不带@JvmInline的value class的作用

  • 适配多平台代码开发:跨平台共享代码层可以直接声明无注解的value class,不同目标平台会自动适配对应优化逻辑,不需要写平台特定的条件判断代码。
  • 保留类型安全语义的同时预留优化空间:如果当下不需要内联的性能收益,可以先用无注解的value class实现类型封装,避免原始类型滥用导致的逻辑错误,后续需要优化时直接添加@JvmInline注解即可,不需要修改上层业务代码。

内容的提问来源于stack exchange,提问作者Klitos Kyriacou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:30:05