It's object expression which is more general analogous to java's anonymous inner classes and since it is expression it closures `this` reference, so it's neither bug or outdated documentation. But i think someone from Kotlin team will provide more formal explanation
Although object expressions are compiled into classes, they are not strictly classes from the language point fo view, and the aforementioned extract from the docs does not apply to them
Adding on to this original question… Is there a way to reference this inner class from the outer class? For example, in Android I’m trying to create a RecyclerView adapter on the fly like this:
rvItemsList.adapter = object : RecyclerView.Adapter<ViewHolderInnerClass>() {
inner class ViewHolderInnerClass(view: View) : RecyclerView.ViewHolder(view) {
var title: TextView = view.findViewById(R.id.title) as TextView
}
override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): RecyclerView.ViewHolder {
return ViewHolderInnerClass( LayoutInflater.from(parent.context).inflate(android.R.layout.simple_list_item_1, parent, false))
}
override fun getItemCount(): Int {
return itemList.size // Reference to List<String> object outside this anonymous class
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
holder.title.text = itemList[position]
}
}
Of course, this code doesn’t work because Kotlin doesn’t allow referencing the inner class ViewHolderInnerClass the way I did but how would I go about doing it correctly?