如何使用kotlin创建在构造函数中传递方法引用的generics类的实例

现在,我正在使用kotlin作为我的主要编程语言,我正试图简化Android的Recyclerview实现逻辑,我被困在以下几点:

比方说,我已经定义了下面的ViewHolder类,通过构造函数中的方法引用传播点击位置事件。

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

我怎样才能构建一个在构造函数中有方法引用的generics类的实例?

我的recyclerview实现在构造函数中有一个generics类,也是一个实体引用,可以通过在onCreateViewHolder上的reflection来创建我的CustomViewHolder类的实例:

 class CustomAdapter(val entityClass: Class) : RecyclerView.Adapter() { /* 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 val instance: HolderClassGeneric //I'M STUCK HERE constructor = entityClass.getConstructor(View::class.java, ?¿?¿?¿?¿) instance = constructor.newInstance(view, this::onListItemClicked) return instance } 

如果我想要实现的是不可能的,是否有可能通过reflection来使用setter来传递方法引用?

一个Kotlin lambda通常被翻译成一个FunctionX对象,它是X的参数个数,所以如果你正在寻找一个lambda函数的表示forms,比如(Int) -> Unit就是Function1 so你可以简单地做:

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

您可以使用像工厂一样的参数function。

 class CustomAdapter(val entityFactory: (View, (Int) -> Unit) -> HolderClassGeneric) : RecyclerView.Adapter() { /* 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 }