我不确定以下两个用Kotlin编写的构造函数之间的区别
class ConcreteItem(val title: String) : Item() {
}
和
class ConcreteItem(private val title: String) : Item() {
}
正如您所看到的,唯一的区别是"私人"标题字段前的修饰符。它将如何影响标题字段的范围?
答案 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;
}
}