Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解kotlin中的内联类_Kotlin_Inline - Fatal编程技术网

理解kotlin中的内联类

理解kotlin中的内联类,kotlin,inline,Kotlin,Inline,我试图理解kotlin中的内联类 fun main(){ val password = Password("Current Password") println(password) println(password.password) } inline class Password(val password: String) 这是我根据文档编写的示例代码。现在他们说不会发生类密码的实例化 我的输出应该是 Current Password Current Passwor

我试图理解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

如果实例化没有发生,那么当我们试图直接访问密码变量时,我们应该将其作为公共字符串来访问,对吗?

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

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


从您的角度来看,您仍然将其完全视为任何基本类,这些基本类具有可为null或用作泛型的包装器版本。但是您还有一个额外的好处,即可以重写
toString()
并添加函数,而无需使用扩展。

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

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

从您的角度来看,您仍然将其完全视为任何基本类,这些基本类具有可为null或用作泛型的包装器版本。但是,您还有一个额外的好处,即可以重写
toString()
,并在不使用扩展的情况下添加函数