2016-06-14 24 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方法不改变原始对象。它返回一个新的对象与更改的值。我想你的例子,这两个复印件的工作,如预期时,我捕捉到一个新val返回的对象:

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) 

如果你想你的突变state -object的列表值,你可以做这个:

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

此外,你应该做'val list = state?.list?.subList(0,1)?:emptyList()',而不是使用'!!'操作符来避免NullPointerExceptions。 – marstran