[코드 수정문제] kotlin입니다. 이 코드 수정을 어떻게 해야되죠?
조회수 561회
class Snapshot<T>(private val array:MutableList<T>) {
fun restore():MutableList<T> {
return array
}
}
fun test2(){
var array = mutableListOf(1,2)
val snap = Snapshot(array)
array[0] = 1
array = snap.restore()
println(array.toList().joinToString()) //It should log "1,2"
array.add(4)
array = snap.restore()
println(array.toList().joinToString()) //It should log "1,2"
}
fun main(str: Array<String>) {
test2()
}
//현재상태 output:
1, 2
1, 2, 4
//정상 output:
1,2
1,2
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
자문자답입니다.
class Snapshot<T>(private val array: MutableList<T>) { var deepCopyArray:MutableList<T> = ArrayList() init { deepCopyArray.addAll(array) } fun restore():MutableList<T> { array.clear() array.addAll(deepCopyArray) return array } } fun test2(){ var array = mutableListOf(1,2) val snap = Snapshot(array) array[0] = 1 array = snap.restore() println(array.toList().joinToString()) //It should log "1,2" array.add(4) array = snap.restore() println(array.toList().joinToString()) //It should log "1,2" } fun main(str: Array<String>) { test2() } //현재상태 output: 1, 2 1, 2 //정상 output: 1, 2 1, 2
-
(•́ ✖ •̀)
알 수 없는 사용자
-
-
MutableList 이고 add(4) 를 했으니 1,2,4 가 나오는 것이 정상입니다.
왜 1,2,4 가 되는지 이해하는 것이 더 중요합니다.
코틀린에서는 컬렉션에 대해 변경가능한 타입과 불가능한 타입이 나뉘어져 있습니다.
기본적으로 사용하는 list 는 변경불가형이나 명시적으로 MutableList 을 사용했기 때문에 add 가 되는 겁니다.
댓글 입력