我无法从Kotlin的嵌套类中找到任何类成员

fti*_*i93 31 scope class member kotlin

我想从PersonAdapter类访问MainFragment类的成员,但它们都不可用.我试图让这两个类和成员公开和私有,但到目前为止没有任何效果.我想我错过了一些明显的东西,但我无法弄明白.

class MainFragment : Fragment() {
    lateinit var personAdapter: PersonAdapter
    lateinit var personListener: OnPersonSelected
    private var realm: Realm by Delegates.notNull()
    lateinit var realmListener: RealmChangeListener<Realm>

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val v = inflater.inflate(R.layout.fragment_main, container, false)
        return v
    }

    class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
        var localPersonList = personList

        override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            holder.bindItems(localPersonList[position])

            holder.itemView.setOnClickListener {
                Toast.makeText(context, "click", Toast.LENGTH_SHORT).show()
                //I want to reach personListener from here
            }
        }

        override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
            val v = LayoutInflater.from(parent!!.context).inflate(R.layout.person_list_item, parent, false)
            return ViewHolder(v)
        }
    }}
Run Code Online (Sandbox Code Playgroud)

hot*_*key 66

在Kotlin中,嵌套类默认情况下不能访问外部类实例,就像static classJava中的嵌套es 一样.

为此,请将inner修饰符添加到嵌套类:

class MainFragment : Fragment() {
    // ...

    inner class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅:语言参考中的嵌套类


AaR*_*RiF 8

在Kotlin中,有两种类型的嵌套类.

  1. 嵌套类
  2. 内在的阶级

不允许嵌套类访问外部类的成员.

如果要在嵌套类中访问外部类的成员,则需要将该嵌套类定义为内部类.

class OuterClass{

    var name="john"

    inner class InnerClass{

       //....
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 内部类中要访问父类,使用**this@OuterClass** (4认同)