在Kotlin的构造函数中向参数添加私有修饰符时有什么区别?

roo*_*dev 3 android kotlin

我不确定以下两个用Kotlin编写的构造函数之间的区别

class ConcreteItem(val title: String) : Item() {

}
Run Code Online (Sandbox Code Playgroud)

class ConcreteItem(private val title: String) : Item() {
}
Run Code Online (Sandbox Code Playgroud)

如您所见,唯一的区别是标题字段之前的"私有"修饰符.它将如何影响标题字段的范围?

小智 7

以下代码:

class ConcreteItem(val title: String) : Item() {
}
Run Code Online (Sandbox Code Playgroud)

是一个快捷方式:

class ConcreteItem(title: String) : Item() {
    val title: String = title
}
Run Code Online (Sandbox Code Playgroud)

val title暗示缺少显式访问修饰符的地方public:

class ConcreteItem(title: String) : Item() {
    public val title: String = title
}
Run Code Online (Sandbox Code Playgroud)

同样,以下代码:

class ConcreteItem(private val title: String) : Item() {
}
Run Code Online (Sandbox Code Playgroud)

是一个快捷方式:

class ConcreteItem(title: String) : Item() {
    private val title: String = title
}
Run Code Online (Sandbox Code Playgroud)

考虑到这一点,两个声明之间的区别仅仅是声明公共财产与私有财产.

  • 这实际上不是真的。OP 中的两个示例都创建私有成员。不同之处在于 `val title: String` 将创建一个 getter,而 `private val title: String` 不会 (3认同)