了解 kotlin 中的内联 类

Understanding inline classes in kotlin

我正在尝试理解 kotlin 中的内联 classes

fun main(){
    val password = Password("Current Password")
    println(password)
    println(password.password)
}

inline class Password(val password: String)

这是我根据文档编写的示例代码。现在他们说不会实例化 class 密码。

我的输出应该是

Current Password
Current Password

但是我得到了

Password(password=Current Password)
Current Password

如果不进行实例化,那么当我们尝试直接访问密码变量时,我们应该将其作为普通字符串访问,对吗?

只要您不在可空或通用上下文中使用它,它就不会编译为对象。如果这样做,它将像基元一样被包裹在一个对象中。

但是 toString() 和其他函数和属性仍然可以像 class 一样使用,就像它们用于基元一样。我不知道编译代码中的确切机制,但我猜测它们的实现方式与扩展函数相同(在 JVM 上,扩展函数被编译为静态方法,"receiver" 作为另一个参数)。

从您的角度来看,您仍然将其视为任何原始 classes,当它们可为 null 或用作泛型时,它们具有包装版本。但是您还有一个额外的好处,那就是能够覆盖 toString() 并在不使用扩展的情况下添加功能。