Android Kotlin plus()不更改原始列表
TL,DR 我有一个Kotlin代码,其中元素被添加到arraylist,但是列表没有存储新值,尽管函数的返回显示了更改的列表Android Kotlin plus()不更改原始列表,android,kotlin,pojo,Android,Kotlin,Pojo,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
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()
}
我的输出:
消息
已经有[“a”、“bcd”、“xfd”]
打印后的结果如下:
a = ["a", "bcd", "xfd", "Hello"]
b = ["a", "bcd", "xfd"]
a = true
b = ["a", "bcd", "xfd"]
我如何使原始
消息
更新其在FriendClass
中的值?检查函数的签名:
@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
}
这将起作用,因为消息
是可变的(用var
声明)
有一篇关于这些陷阱的文章很棒。我已经更新了我的答案。由于您将列表
消息
声明为列表
,因此您无法对其进行真正的修改,但您可以将其值重新分配给其他列表。我不想重新分配,我想更新原始列表,但我会尝试您的答案,并在您无法按原样回复时立即回复。如果将messages
声明为ArrayList
或MutableList
,则只需调用DataClass.getInstance().friendDetailList[0]。messages?.add(“Hello”)
。
a = ["a", "bcd", "xfd", "Hello"]
b = ["a", "bcd", "xfd"]
a = true
b = ["a", "bcd", "xfd"]
@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")