Android val无法重新分配

Die*_*omo 0 android kotlin

当我尝试从一个方法修改它时,我定义了一个名为notes的变量,android studio说

val无法重新分配

但是,如果我像这样访问变量,我可以修改它:this.notes.

class NoteAdapter(var context : Context) : RecyclerView.Adapter<NoteViewHolder>(){

private var notes = emptyList<Note>()

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): NoteViewHolder {
    var itemView = LayoutInflater.from(context).inflate(R.layout.note_item, parent, false)
    return NoteViewHolder(itemView)
}

override fun getItemCount(): Int {
    return notes.size
}

fun setNotes(notes: List<Note>) {
    this.notes = notes
    notifyDataSetChanged()
}
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

我来自Javascript背景,所以请原谅我的无知.

Com*_*are 8

你命名了两件事notes:

private var notes = emptyList<Note>()
Run Code Online (Sandbox Code Playgroud)

和:

fun setNotes(notes: List<Note>)
Run Code Online (Sandbox Code Playgroud)

所以,在setNotes()函数中,notes指的是函数参数.这被视为一个val,不能重新分配.this.notesnotesNoteAdapter班上定义的属性.

一般来说,尝试使用不同的名称,以减少混淆.例如,您可以使用:

fun setNotes(replacementNotes: List<Note>)
Run Code Online (Sandbox Code Playgroud)