无法重新分配Android Val

时间:2019-01-21 12:47:27

标签: 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()
}

为什么会这样?

我来自JavaScript背景,请原谅我的无知。

2 个答案:

答案 0 :(得分:8)

您命名了两件事notes

private var notes = emptyList<Note>()

和:

fun setNotes(notes: List<Note>)

因此,在setNotes()函数中,notes引用了函数参数。该名称被视为val,无法重新分配。 this.notes指的是在notes类上定义的NoteAdapter属性。

通常,请尝试使用其他名称,以减少混乱。例如,您可以使用:

fun setNotes(replacementNotes: List<Note>)

答案 1 :(得分:0)

在科特林,

val -当您在Koltin中将任何变量声明为最终变量时,因此一旦分配,我们将无法更改其值。

因此,当您需要在运行应用程序时定义/更改值时,请使用 var