文章目录
我并不知道它的名字是不是这样翻译,以前是叫内联类(
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