java - Я не могу найти ни одного ученика из вложенного класса в Котлине




class scope (2)

В Kotlin вложенные классы не могут получить доступ к экземпляру внешнего класса по умолчанию, как вложенные static class в Java.

Для этого добавьте inner модификатор во вложенный класс:

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

    inner class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
        // ...
    }
}

Смотрите: Вложенные классы в справочнике по языку

Я хочу получить доступ к члену класса MainFragment из класса PersonAdapter, но ни один из них не доступен. Я пытался сделать как классы, так и участников публичными и частными, но пока ничего не получалось. Я предполагаю, что упускаю что-то очевидное, но я просто не могу понять это.

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)
        }
    }}

В Котлине есть 2 типа вложенных классов.

  1. Вложенный класс
  2. внутренний класс

Вложенный класс не имеет доступа к члену внешнего класса.

Если вы хотите получить доступ к члену внешнего класса во вложенном классе, то вам нужно определить этот вложенный класс как внутренний класс.

class OuterClass{

    var name="john"

    inner class InnerClass{

       //....
    }

}




member