我定义了一个名为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背景,请原谅我的无知。
答案 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