为什么要将val或var放入kotlin类构造函数中
在下面的第一个代码中学习Kotlin,在另一个代码中没有为什么要将val或var放入kotlin类构造函数中,kotlin,in-class-initialization,Kotlin,In Class Initialization,在下面的第一个代码中学习Kotlin,在另一个代码中没有val关键字, 如果省略val和var,这里有什么不同 class Person(val firstName: String, val lastName: String) { } class Person(firstName: String, lastName: String) { } 若省略了val或var,那个么它们将不是属性,而是传递给构造函数的参数。您将无法在构造函数之外使用这些参数。如果在构造函数中省略val或var,则可以访
val
关键字,
如果省略val
和var
,这里有什么不同
class Person(val firstName: String, val lastName: String) {
}
class Person(firstName: String, lastName: String) {
}
若省略了val或var,那个么它们将不是属性,而是传递给构造函数的参数。您将无法在构造函数之外使用这些参数。如果在构造函数中省略
val
或var
,则可以访问这些参数的唯一位置是在构造时计算的初始化语句。看
当您想在存储某个值之前使用该值执行某项操作时,这非常有用。在Java中,您可以将该代码放在构造函数体中
class Person(firstName: String, lastName: String) {
// directly in val / var declarations
val firstName = firstName.capitalize()
val lastName = lastName
// in init blocks
val fullName: String
init {
fullName = "$firstName $lastName"
}
// secondary constructors can only see their own parameters
// and nothing else can access those
constructor(fullName: String) : this("", fullName)
}
但它也适用于
或者在财产委托中
class Person4(firstName: String, lastName: String) {
val fullName: String by lazy { "$firstName $lastName" }
}
注意:闭包是在初始化时捕获的,因此当
lazy
最终求值时,这些值仍然可用。这是一个直截了当的解释,我一直在寻找这种解释。
class Person4(firstName: String, lastName: String) {
val fullName: String by lazy { "$firstName $lastName" }
}