Сделайте независимую копию ParseObject в Kotlin - PullRequest
0 голосов
/ 02 ноября 2018

Я реализовал конструктор копирования в моем подклассе Kotlin ParseObject.

@ParseClassName("MySubclass")
class MySubclass: ParseObject {
    /** Registered ParseObject Subclasses require an empty primary constructor **/
    constructor()

    /** Copy Constructor **/
    constructor(original: MySubclass) : super() {
        myStrings = original.myStrings
        ...
    }

    var myStrings: MutableList<String>
        get() = getList("myStrings") ?: mutableListOf()
        set(value) = put("myStrings", value)

    ...

    /** 
     * Retrieves the list of Strings, then adds a new String to it before 
     * replacing the list in the ParseObject.
     **/
    fun addString(string: String) {
        val list = myStrings
        list.add(string)
        myStrings = list
    }
}

Но когда я изменяю свою копию, оригинал тоже изменяется.
Почему это происходит? Разве этот подход не должен производить два разных объекта?

fun main(args : Array<String>) {

    val original = MySubclass()
    original.myStrings = listOf("This", "That")
    println("${original.myStrings.size}") // "2" as expected

    // Make a copy
    val newCopy = MySubclass(original)
    println("${newCopy.myStrings.size}") // "2" as expected

    // Modify the copy
    newCopy.addString("Other")
    println("${newCopy.myStrings.size}") // "3" as expected

    println("${original.myStrings.size}") // "3" why has this object been modified too???
}
...