Дженерики для RecyclerView.Adapter Android

Я пытаюсь использовать общую функцию расширения для всех RecyclerView.Adapter в моем приложении, поэтому я создал ext fun, называемый notifyAdapter, но он работает не так, как ожидалось.

 fun <T> RecyclerView.Adapter<RecyclerView.ViewHolder>.notifyAdapter() { updateAll() notifyDataSetChanged() } 

Когда я использую

offlineListAdapter.notifyAdapter() или onlineListAdapter.notifyAdapter()

он бросает

Не может применяться к приемнику OfflineListAdapter

OfflineListAdapter.kt

  class OfflineListAdapter : RecyclerView.Adapter<OfflineListAdapter.OfflineListHolder>() { class OfflineListHolder(view: View) : RecyclerView.ViewHolder(view) { } } 

Как создать общую функцию расширения для всех RecyclerView.Adapter с использованием Generics.

Заранее спасибо.

    Есть несколько способов сделать это.

    1. Вы можете пометить параметр ViewHolder с помощью дисперсии. Таким образом, ваша функция не является общей, поэтому у вас не будет доступа к точному типу ViewHolder .

       fun RecyclerView.Adapter<out RecyclerView.ViewHolder>.notifyAdapter() { ... } 
    2. Кроме того, у вас может быть параметр общего типа для функции, которая должна быть подклассом ViewHolder . Таким образом, вы можете использовать T внутри функции, например, вы могли бы создать listOf<T>() если хотите.

       fun <T : RecyclerView.ViewHolder> RecyclerView.Adapter<T>.notifyAdapter() { ... } 
    3. Наконец, вы также можете использовать звездную проекцию, которая, как я полагаю, в этом случае даст вам тот же результат, что и первое решение, поскольку аргумент типа класса Adapter имеет верхнюю границу ViewHolder .

       fun RecyclerView.Adapter<*>.notifyAdapter() { ... } 

    Здесь вы можете более подробно ознакомиться с отклонением и прогнозами в официальной документации.

    Intereting Posts
    Как решить: «ошибка: не удается найти класс символов …» после преобразования класса Java в Kotlin? Использование подчеркивания («_») сразу после переменной в строковых шаблонах в Котлине Расширение RxJava наблюдаемого в Котлине с надлежащей утилизацией Безусловная инфляция макета из адаптера просмотра. Котлин Основной метод Kotlin Android не вызывается Правильное выполнение ожидания и уведомления в Kotlin андроид, получивший манифест слияния с ошибкой после обновления до новой версии gradle Как вводить представления фрагментов, используемых в PagerAdapter с кинжалом? Добавление числа в Android с помощью Kotlin Как назначить нулевое значение переменной типа функции в Котлин? Просмотр Android Update после успеха JSONRequest Ошибки привязки данных в прикладном модуле Оператор «Когда» и «switch» оператора Java Могу ли я применять функцию infix внутри собственного класса без этого? Как создать неизменный список в Kotlin, который также является неизменным списком в Java?