kotlin - inline 关键字在 Kotlin 类构造函数中有效吗?

标签 kotlin constructor class-constructors

假设您有 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/

相关文章:

java - 如何使用Kotlin或Java计算祷告时间?

java - java中多级继承中构造函数调用的顺序

javascript: getAverageAge 所有对象

javascript - 为什么在定义了一些从对象到变量上下文的方法后丢失了?

java - 向 java 构造函数与方法发送参数

c# - 为什么我的 C# 构造函数无法使用我尝试使用的方法?

java - Kotlin:集合的多种操作

generics - Rx Kotlin : trying to add custom errors catching

Kotlin REPL println 不打印到新行,而是将所有内容打印到同一行

c# - Nhibernate - 在构造函数中做事