如何在 Kotlin 的内部 class 中使用外部 class 的 属性?

How to use a property of a outer class in inner class in Kotlin?

我有这个class:

class ItemsAdapter(
    val items: List<Item> = mutableListOf()
) {
    class ItemViewHolder(private val itemView: View) : ViewHolder(itemView), View.OnClickListener {
        override fun onClick(v: View) {
            val clickedItem = items.get(adapterPosition)
        }
    }
}

即使items对象在外层class中定义,也不能在内层class中使用。如何在 onClick 函数中使用 items 对象?

您需要将 ItemViewHolder 标记为 inner class

inner class ItemViewHolder

有关 https://kotlinlang.org/docs/reference/nested-classes.html

的更多信息

如果你想在内部class中访问外部class的成员,那么你必须用inner关键字标记内部class。

将您的 ItemViewHolder 标记为 inner,一切都会正常进行。

class ItemsAdapter(
    val items: List<Item> = mutableListOf()
) {
    inner class ItemViewHolder(private val itemView: View) : ViewHolder(itemView), View.OnClickListener {
        override fun onClick(v: View) {
            val clickedItem = items.get(adapterPosition)
        }
    }
}

只需使用inner关键字

import android.view.View
import androidx.recyclerview.widget.RecyclerView

class ItemsAdapter(
    val items: List<Item> = mutableListOf()
) {
    inner class ItemViewHolder(private val itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
        override fun onClick(v: View) {
            val clickedItem = items.get(adapterPosition)
        }
    }
}