2016-06-14 2 views
0

var 값이 변경된 데이터 클래스 개체를 복사 할 수없는 이유는 무엇입니까?var 값이 변경된 Kotlin 데이터 클래스 복사

data class AppState(var list: List<Image> = ArrayList<Image>(), 
       val uiState: UIState = UIState.LIST, 
       val isFetching: Boolean = false) 

... 

val list = state!!.list.sublist(0,1); 
state.copy(list = list)  // No change 
state.copy(isFetching = true) // Works like a charm 
+2

'copy'가 새로운 인스턴스를 반환하고 수신자를 수정하지 않는다는 것을 알고 계십니까? – nhaarman

답변

6

copy 메서드는 원본 개체를 변경하지 않습니다. 값이 변경된 새 객체를 반환합니다. 당신은 그냥 할 수있는, 당신이 당신의 state -object의 목록 값을 돌연변이하려면

val list = state!!.list.subList(0,1) 

// Creates a new object with the new list. 
val withNewList = state.copy(list = list) 

// Creates a new object with the new isFetching. 
val withNewIsFetching = withNewList.copy(isFetching = true) 

: 나는 당신의 예를 시도하고, 나는 새로운 val에서 반환 된 객체를 캡처 할 때 당신의 사본을 모두 예상대로 작동 이 :

val list = state!!.list.subList(0,1) 
state.list = list 
+2

또한'!!'연산자 대신 NullPointerExceptions를 피하기 위해'val list = state? .list? .subList (0,1)? : emptyList()'를 사용해야합니다. – marstran