Kotlin Один аргумент типа, ожидаемый для класса для абстрактного общего владельца представления

Я пытаюсь создать RecyclerView.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>() { 

Я получаю «Один аргумент типа, ожидаемый для класса», компилирую ошибку:

 RecyclerView.Adapter<BaseSettingsViewHolder> 

Цените помощь!

Вы должны указать аргумент типа для BaseSettingsViewHolder в BaseSettingsViewHolder RecyclerView.Adapter<BaseSettingsViewHolder> .

Kotlin, в отличие от Java, не имеет сырых типов, поэтому вы не можете просто опустить аргументы типа.

Ближайшая концепция для типов raw – это звездообразные типы : используйте BaseSettingsViewHolder<*> в RecyclerView.Adapter<BaseSettingsViewHolder<*>> , это будет означать, что аргумент типа для BaseSettingsViewHolder неизвестен.

1- Если вы всегда используете SettingTitleViewHolder ;

 RecyclerView.Adapter<SettingTitleViewHolder> 

2- Если вы хотите использовать любой класс, который расширил BaseSettingViewHolder ;

 RecyclerView.Adapter<BaseSettingsViewHolder<*>> 

3- Использовать любой тип объекта

 RecyclerView.Adapter<BaseSettingsViewHolder<Any>> 

4- Использовать параметр расширенного типа для класса адаптера

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

5- Определите параметр абстрактного типа класса.

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

7- Читайте эту статью => «Дженерики в Котлине» 😉

Intereting Posts
Kotlin: общая коллекция в общий массив Присвоить лямбда непосредственно унаследованному абстрактному методу Ион Котлин для работы с ненулевым объектом и непустым строковым представлением Kotlin: Интерфейс, посредством которого разработчик должен быть классом данных? setSmallIcon (значок: значок) и NotificationCompat Веб-просмотр Android с kotlin. не работает тип ввода = файл Весенняя безопасность. Перенаправление на защищенную страницу после аутентификации автономный сценарист, чтобы получить intellij проект Kotlin – заводская функция для класса с частным конструктором Не удалось добавить расширения Android Kotlin в мой проект Почему объектам, находящимся внутри объекта сопутствующего объекта Kotlin, не удается получить доступ к «статически», когда другие члены могут? Как создать бесконечно длинную последовательность в Котлине Kotlin проверка недействительности if-else функциональный подход … Как? IllegalArgumentException: параметр, заданный как непустой, равен null findViewById ClassCastExcpetion