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

时间:2017-12-15 01:08:04

标签: android kotlin

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

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

}

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

正如您所看到的,唯一的区别是"私人"标题字段前的修饰符。它将如何影响标题字段的范围?

3 个答案:

答案 0 :(得分:5)

以下代码:

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

是:

的快捷方式
class ConcreteItem(title: String) : Item() {
    val title: String = title
}

val title缺少显式访问修饰符意味着public

class ConcreteItem(title: String) : Item() {
    public val title: String = title
}

同样,以下代码:

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

是:

的快捷方式
class ConcreteItem(title: String) : Item() {
    private val title: String = title
}

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

答案 1 :(得分:1)

如果应用private修饰符,那么公共" getter"不会被合成,其他类可以询问" title"的价值。否则将会。

答案 2 :(得分:-1)

您几乎总是希望构造函数参数可用于类中的所有代码。这将是从构造函数参数中创建私有成员变量的惯用方法。

class ConcreteItem(private val title: String) {}

如果您与Java类似,那意味着:

class ConcreteItem {
    private final String title;

    public ConcreteItem(final String title) {
        this.title = title;
    }
}