Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要将val或var放入kotlin类构造函数中_Kotlin_In Class Initialization - Fatal编程技术网

为什么要将val或var放入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,则可以访

在下面的第一个代码中学习Kotlin,在另一个代码中没有
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" }
}