我正在try 创建具有以下内容的ReccyclerView.Adapter:


视图持有者——提供了抽象的父视图和一个子视图

abstract class BaseSettingsViewHolder<T>(var viewDataBinding : 
ViewDataBinding) : RecyclerView.ViewHolder(viewDataBinding.root) {

   abstract fun onBind(data: T, presenter: ISettingsPresenter, position: Int)
}

class SettingsTitleViewHolder(viewDataBinding: ViewDataBinding) : BaseSettingsViewHolder<TitleData>(viewDataBinding) {

    override fun onBind(data: TitleData, presenter: ISettingsPresenter, position: Int) {
        viewDataBinding.setVariable(BR.titleData, data)
        viewDataBinding.setVariable(BR.itemPosition, position)
        viewDataBinding.setVariable(BR.settingsPresenter, presenter)
        viewDataBinding.executePendingBindings()
    }

}

当试图声明适配器时:

class SettingsAdapter(var context: Context, var presenter: ISettingsPresenter) : RecyclerView.Adapter<BaseSettingsViewHolder>() {

I'm getting "One type argument expected for class" compile error on the:

RecyclerView.Adapter<BaseSettingsViewHolder>

Appreciate the help!

推荐答案

1-如果你总是使用SettingTitleViewHolder

RecyclerView.Adapter<SettingTitleViewHolder>

2-如果要使用扩展为BaseSettingViewHolder的任何类;

RecyclerView.Adapter<BaseSettingsViewHolder<*>>

3-使用Any Object Type

RecyclerView.Adapter<BaseSettingsViewHolder<Any>>

4- Use extended type parameter for adapter class

class SettingsMenuAdapter<T>:RecyclerView.Adapter<T> where : BaseSettingViewHolder<*>

5-为抽象类类型参数定义输出.

abstract class BaseSettingsViewHolder<out T> RecyclerView.Adapter<BaseSettingsViewHolder<Any>>

7- Read that article => "Generics in Kotlin" ;)

Kotlin相关问答推荐

Kotlin—从列表中枚举属性计算不同值的数量

Kotlin—列出具有不同T的列表之间的操作'

用普通Kotlin理解Gradle的Kotlin DSL'""

如何在Jetpack Compose中从领域查询中读取数据?

Microronaut Data 4和JDbi

有没有一种简单的方法来识别物体?

如何规避 Kotlin 的泛型类型差异约束

如何在 Kotlin 中实现 Composition UML 关系?

如何通过 compose 处理剪切区域?

为 Gradle 子项目配置 Kotlin 扩展

AIDL 中的 Parcelize 注释:Incompatible types: Object cannot be converted to MyCustomObject

Kotlin 中的 Java Scanner 相当于什么?

在粘贴时将 java 转换为 kotlin

如何将 kotlin 集合作为 varagrs 传递?

如何解决此错误请Kotlin:[Internal Error] java.lang.ExceptionInInitializerError

Kotlin get字段注释始终为空

Gradle:无法连接到 Windows 上的 Kotlin 守护程序

Kotlin 与 C# 中的标志枚举变量具有相似效果的方式是什么

如何在 Fragment 中使用 Anko DSL?

任务':app:kaptDebugKotlin'的Kotlin执行失败