gpt4 book ai didi

java - Kotlin 中的赋值链?

转载 作者:行者123 更新时间:2023-12-03 07:56:32 25 4
gpt4 key购买 nike

在Java中,有一种称为赋值链的语法糖结构,如下所示:

public class Cat {
String firstName;
String lastName;

Cat() {
lastName = firstName = "Matroskin"; // compiles!
}
}

有没有办法在 Kotlin 中准确地执行此操作?

最佳答案

这在 Java 中有效,因为赋值是计算所分配值的表达式。但是,Kotlin 中的赋值不是表达式,因此无法使用相同的语法。

如果您想避免两次写入 "Matroskin",您可以使用 scope functions 之一。可用的。我会使用 let:

"Matroskin".let {
firstName = it
lastName = it
}

由于这是在构造函数中,因此您还可以执行以下操作:

var firstName = "Matroskin"
var lastName: String

init {
lastName = firstName
}

(此部分仅供娱乐)

也就是说,您可以通过定义一个名为 = 的中缀函数,技术上滥用 Kotlin 的功能来实现类似的语法。

infix fun <T> T.`=`(prop: KMutableProperty<T>): T {
prop.setter.call(prop)
return this
}
"Matroskin" `=` ::lastName `=` ::firstName

请注意,要分配的值首先排序,因为中缀函数是左关联的。您可以声明 = 并反转参数,但使用时需要括号:

::lastName `=` (::firstName `=` "Matroskin")

此外,这不算作初始化属性,因此如果您不为 firstNamelastName 提供默认值,Kotlin 会提示它们未初始化:

var firstName = ""
var lastName = ""

如果您使用的是val,那么这种方式不适用。

关于java - Kotlin 中的赋值链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75915077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com