了解Kotlin的内联类

问题描述 投票:0回答:2

我正在尝试了解Kotlin中的内联类

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

inline class Password(val password: String)

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

我的输出应该是

Current Password
Current Password

但是我得到

Password(password=Current Password)
Current Password

如果没有实例化,那么当我们尝试直接访问password变量时,我们应该将其作为普通字符串访问吗?

kotlin inline
2个回答
0
投票
只要您不在可为空或通用的上下文中使用它,它就不会编译为对象。如果这样做,它将像原始对象一样被包装在一个对象中。

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

从您的角度来看,您仍然将它与任何原始类完全一样对待,这些原始类具有可包装为null或用作泛型的包装版本。但是您还有一个额外的好处,就是可以覆盖toString()并添加功能而不使用扩展名。

© www.soinside.com 2019 - 2024. All rights reserved.