代码之家  ›  专栏  ›  技术社区  ›  Diego Perdomo

无法重新分配Android VAL

  •  -1
  • Diego Perdomo  · 技术社区  · 6 年前

    我定义了一个名为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 回复  |  直到 6 年前
        1
  •  8
  •   CommonsWare    6 年前

    你说出了两件事 notes :

    private var notes = emptyList<Note>()
    

    还有:

    fun setNotes(notes: List<Note>)
    

    所以,在 setNotes() 函数, 笔记 指函数参数。被视为 val 无法重新分配。 this.notes 指的是 笔记 在您的 NoteAdapter 班级。

    一般来说,尽量用不同的名字,以减少混淆。例如,您可以使用:

    fun setNotes(replacementNotes: List<Note>)
    
        2
  •  0
  •   Padma Kumar    6 年前

    在Kotlin,

    瓦尔 -当您在koltin中声明任何变量为 最终变量 所以一旦分配,我们就不能改变它的值。

    所以用 var 当您需要在运行应用程序时定义/更改值时