理解kotlin中的内联类
我试图理解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
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()
,并在不使用扩展的情况下添加函数