gpt4 book ai didi

android - Kotlin plus() 不改变原始列表

转载 作者:行者123 更新时间:2023-12-02 13:20:18 25 4
gpt4 key购买 nike

TL,DR

我有一个 Kotlin 代码,其中元素被添加到 arraylist 但列表没有存储新值,尽管函数的返回显示了更改的列表。

Example problem: 
/* someList = ["A", "ab"] */
val x = someList.plus("Abc")

Example output:
someList = ["A", "ab"] , x = ["A", "ab", "Abc"]

完整问题

我的代码:
class FriendClass{
/* others */
@JsonProperty("messages")
var messages: List<String>? = ArrayList()
}
class DataClass{
/* singleton */
/* others */
@JsonProperty("friend_detail_list")
var friendDetailList: List<FriendClass> = ArrayList()
}
class Adapter{
val a = DataClass.getInstance().friendDetailList[0].messages?.plusElement("Hello")
val b = DataClass.getInstance().friendDetailList[0].messages
val c = DataClass.getInstance().friendDetailList[0].messages?.toMutableList().add("Hello")
val d = DataClass.getInstance().friendDetailList[0].messages
/* printing a, b, c, d */
}

我的输出:
messages已经有 ["a", "bcd", "xfd"]
现在打印后的结果是:
a = ["a", "bcd", "xfd", "Hello"]
b = ["a", "bcd", "xfd"]
a = true
b = ["a", "bcd", "xfd"]

我如何制作原版messagesFriendClass 中更新它的值?

最佳答案

检查函数的签名:

@kotlin.internal.InlineOnly
public inline fun <T> Iterable<T>.plusElement(element: T): List<T> {
return plus(element)
}

/**
* Returns a list containing all elements of the original collection and then the given [element].
*/
public operator fun <T> Collection<T>.plus(element: T): List<T> {
val result = ArrayList<T>(size + 1)
result.addAll(this)
result.add(element)
return result
}

从中可以清楚地看出它不会修改原始列表。你想要的可能是:
val messages = DataClass.getInstance().friendDetailList[0].messages
DataClass.getInstance().friendDetailList[0].messages = messages.plusElement("Hello")

这将起作用,因为 messages是可变的(用 var 声明)。

有一篇关于这些问题的精彩文章 here .

关于android - Kotlin plus() 不改变原始列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58446464/

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