Kotlin 内联值类(@JvmInline value class)

文章目录

我并不知道它的名字是不是这样翻译,以前是叫内联类(inline class),我感觉现在这样叫有点拗口,或者是"值内联类"?如果有错误,麻烦您花点时间告诉我一声,十分感谢。

定义

内联值类可以用于对某一类型做扩展,在运行时,内联值类并不会实例化出对象,而是仅仅使用其包裹值的类型。使用value和注解@JvmInline修饰(在旧版本是使用inlune修饰),并且在主构造函数中只能 声明一个val修饰的成员变量:

kt 复制代码
@JvmInline
value class Password(val value: String) {
    constructor(): this("默认密码")
}


fun main() {
    val defaultPassword = Password()
    val myPassword = Password("abc")
}

内联值类可以实现接口,也在内部定义成员和方法。

相等判定

与数据类类似,两个内联值类对象在使用双等号==判断是否相等时,会判断两者的值是否相等:

kt 复制代码
@JvmInline
value class Password(val value: String)


fun main() {
    val pwd1 = Password("123")
    val pwd2 = Password("123")
    val pwd3 = Password("456")

    println(pwd1 == pwd2)
    print(pwd1 == pwd3)
}
复制代码
true
false
相关推荐
Nerd(BUG版)4 小时前
KMP学习day4--Kotlin空安全与泛型
学习·安全·kotlin
Nerd(BUG版)9 小时前
KMP学习day5--Kotlin Flow异步流基础
开发语言·学习·kotlin
灿飞1 天前
Kotlin与Java虚拟机八:控制流与 when:卫语句、上下文相关解析与穷尽性
java·kotlin
灿飞2 天前
Kotlin与Java虚拟机七:空安全:把十亿美元的错误消灭在类型系统里
java·kotlin
俩个逗号。。3 天前
Kotlin flow 详解
android·开发语言·kotlin
灿飞3 天前
Kotlin与Java虚拟机六:基础与类型系统:一切皆对象,但对象有代价
java·kotlin
alexhilton4 天前
提升 Android Compose 页面的流畅度
android·kotlin·android jetpack
灿飞4 天前
Kotlin与Java虚拟机四:一段代码的完整旅程
kotlin
Kapaseker4 天前
Kotlin 2.5 Value Class 终于能放多个属性了
android·kotlin
传奇开心果编程5 天前
【Jetpack Compose娓娓道来】第29课:状态容器与UI事件建模——把“散装状态”变成“可穷举的契约”
android·kotlin·移动开发·android jetpack·ui框架·开发范式·声明式ui