假设您有 2 个 Kotlin 类
class Battery(
val carbon: Any,
val zinc: Any
)
class RemoteControl(
/* inline */ val battery: Battery,
val buttons: Any
)
请注意 RemoteControl
中注释掉的 inline
关键字。取消注释不会在 Intellij 中产生错误。
这是有效的 Kotlin 代码吗?它有什么作用?
我的期望是它相当于
class RemoteControl(
val carbon: Any,
val zinc: Any,
val buttons: Any
)
但它似乎没有做任何事情。
我使用的是 Kotlin 1.3.72 和 Android Studio 4.0.1
最佳答案
inline
修饰符可用于属性(也可用于主构造函数的属性):
// var property
inline var battery: Battery
get() = Battery("carbon", "zinc")
set(v) { }
// val property
inline val battery: Battery
get() = Battery("carbon", "zinc")
// primary constructor
class RemoteControl(inline val battery: Battery)
在这种情况下,所有访问器都会自动标记为内联。在调用站点,访问器是 inlined as normal functions .
将内联应用到具有支持字段的属性或其访问器,会导致编译时错误:
// error: "Inline property cannot have backing field"
inline var battery: Battery
get() = Battery("carbon", "zinc")
set(v) { field = v } // we use backing field here
还有更多info .
关于kotlin - inline 关键字在 Kotlin 类构造函数中有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63063296/