Cómo crear instancia de class genérica pasando una reference de método en constructor con kotlin

Ahora que estoy usando kotlin como mi principal lenguaje de progtwigción, bash simplificar la lógica de implementación de Recyclerview de Android y estoy atascado en el siguiente punto:

Digamos que he definido la siguiente class ViewHolder, donde un evento de position de clic se propaga a través de una reference de método en el constructor.

class CustomViewHolder(itemView: View, val onClick: (Int) -> Unit)) : RecyclerView.ViewHolder(itemView){ itemView.setOnClickListener { onClick.invoke(adapterPosition) } } 

¿Cómo podría crear una instancia de una class genérica que tenga una reference de método en el constructor?

Mi implementación de recyclerview tiene una class genérica en el constructor y también una reference de entidad para poder crear una instancia de mi class CustomViewHolder por reflexión en onCreateViewHolder:

 class CustomAdapter<HolderClassGeneric>(val entityClass: Class<HolderClassGeneric>) : RecyclerView.Adapter<HolderClassGeneric>() { /* Usual recyclerview stuff */ //Method that I want to be called when a list item is clicked fun onListItemClicked(position: Int) { //do stuff } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HolderClassGeneric { val view = LayoutInflater.from(parent.context).inflate(listItemLayoutResourceId, parent, false) val constructor: Constructor<HolderClassGeneric> val instance: HolderClassGeneric //I'M STUCK HERE constructor = entityClass.getConstructor(View::class.java, ?¿?¿?¿?¿) instance = constructor.newInstance(view, this::onListItemClicked) return instance } 

Si lo que quiero lograr no es posible, ¿sería posible pasar la reference del método usando un setter por reflexión?

Un Kotlin lambda generalmente se traduce como un object FunctionX, siendo X el número de parameters que tiene, por lo que si está buscando la representación de una function lambda como (Int) -> Unit sería Function1<Int, Unit> entonces usted podría simplemente hacer:

 entityClass.getConstructor(View::class.java, Function1::class.java) 

Puede usar una function de parámetro como una fábrica .

 class CustomAdapter<HolderClassGeneric>(val entityFactory: (View, (Int) -> Unit) -> HolderClassGeneric) : RecyclerView.Adapter<HolderClassGeneric>() { /* Usual recyclerview stuff */ //Method that I want to be called when a list item is clicked fun onListItemClicked(position: Int) { //do stuff } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HolderClassGeneric { val view = LayoutInflater.from(parent.context).inflate(listItemLayoutResourceId, parent, false) val instance = entityFactory(view, this::onListItemClicked) return instance }