我创建了一个扩展RecyclerView.Adapter的Java类。它是通用的,可以接受SwipeableViewHolder类型的任何RecyclerView.ViewHolder类:这是其定义方式:
public abstract class SwipeableAdapter<T extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<T> {
@Override
public void onBindViewHolder(T holder, int position) {
SwipeableViewHolder viewHolder = (SwipeableViewHolder) holder;
...
}
}
这一切正常。但是,当我尝试将其转换为Kotlin时,在onBindViewHolder函数中出现错误:
abstract class SwipeableAdapter<T : RecyclerView.ViewHolder>(protected var mContext: Context) :
RecyclerView.Adapter<T>() {
override fun onBindViewHolder(holder: T, position: Int) {
val viewHolder = holder as SwipeableViewHolder
...
}
}
这是SwipeableViewHolder类
open inner class SwipeableViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
@BindView(R.id.text_roll) internal var text_1: TextView? = null
@BindView(R.id.text_trade) internal var text_2: TextView? = null
@BindView(R.id.text_delete) internal var text_2: TextView? = null
init {
ButterKnife.bind(this, itemView)
}
}
[尝试将Holder转换为SwipeableViewHolder时出现错误。错误是:“期望一种类型参数。如果您不想传递类型争论,请使用SwipeableViewHolder ”
我尝试了许多不同的方法来实现这一点,但似乎无法弄清楚。
Android Studio版本:3.5.3KOtlin插件编译器:1.3
我创建了一个扩展RecyclerView.Adapter的Java类。它是通用的,可以接受SwipeableViewHolder类型的任何RecyclerView.ViewHolder类:这是其定义方式:public abstract class ...
因为SwipeableViewHolder
是SwipeableAdapter
的inner
因为它仅处理SwipeableViewHolder
类型的ViewHolders,所以应更改通用类型的界限。然后,您甚至无需进行投射。