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
相关产品推荐
相关产品推荐

