如何在Kotlin中更改参数中的对值

时间:2018-12-18 09:31:05

标签: kotlin

我知道Pair在Kotlin中是一成不变的。问题是,论证在科特林中也是一成不变的。所以当我得到这样的代码时。

fun bind(pair: Pair<String, Boolean>) {
   // Change pair value here
}

pair = pair.copy()在这里不起作用。我不知道该怎么办。

3 个答案:

答案 0 :(得分:2)

您无法写入pair值本身,因为它是immutable,而是像这样创建该值的副本:

val pair2 = pair.copy()

并使用pair2值代替pair本身。

另请参阅this helpful answer

答案 1 :(得分:1)

由于Pair是不可变的,因此您不能只替换对值,除非您正在使用反射。将Pair更改为可变或坚持使用,然后返回新的Pair而不是使用copy(仅设置一些值)或以下命令:

fun bind(pair: Pair<String, Boolean>) = pair.let { (left, right) -> // destructuring
  // exchange pair values here... just showing a sample:
  left.toInt() to right.toString() // this is basically the same as Pair(left.toInt(), right.toString())
} // in this example it returns a Pair<Int, String>

虽然您可能会引入自己的MutablePair类,但我宁愿坚持不变性,并修改您的代码以适当地处理它。可变性可能是一个问题;甚至在其他人不希望您的人变对的情况下。

答案 2 :(得分:0)

您可以使用copy()创建更改后的副本。 (适用于每个data-class.

fun bind(pair: Pair<String, Boolean>) {
   val pairCopy = pair.copy(first = "something else")
}

然后在以下代码中使用pairCopy