Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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
Android Kotlin plus()不更改原始列表_Android_Kotlin_Pojo - Fatal编程技术网

Android Kotlin plus()不更改原始列表

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

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()
}
我的输出:

消息
已经有[“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")