Проблема Kotlin «Для класса ExpandableRecyclerAdapter ожидается один аргумент типа»

Возникли проблемы с RecyclerAdapter ViewHolder.

abstract class ExpandableRecyclerAdapter<T : ExpandableRecyclerAdapter.ListItem>(private val context: Context) : RecyclerView.Adapter<ExpandableRecyclerAdapter.ViewHolder>() {
    protected var allItems = ArrayList<T>()

    ...

    open inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view)
    open class ListItem(val itemType: Int = 0)  
}

ExpandableRecyclerAdapter в <...> подчеркнут с ошибкой:

One type argument expected for class ExpandableRecyclerAdapter< T : ExpandableRecyclerAdapter.ListItem>

Однако, если я объявлю свой класс ViewHolder статическим (путем удаления внутреннего), ошибка исчезнет, ​​но для меня это неприемлемо.

Советы вроде этого не помогут: Kotlin Один аргумент типа ожидается для класса для держателя абстрактного универсального представления

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
4 561
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Kotlin не позволяет указывать универсальные типы без предоставления дженериков, если только вы не ссылаетесь на член класса, не являющийся экземпляром. (статические внутренние классы, ::class, сопутствующие методы). Поскольку ViewHolder является внутренним классом, его идентичность зависит от точной спецификации его внешнего класса, когда речь идет о самом типе.

Это означает, что вы не можете ссылаться на универсальный ExpandableRecyclerAdapter.ViewHolder, вы также должны указать границы, в которых находится внешний класс. Изменение его на ExpandableRecyclerAdapter<T>.ViewHolder должно решить проблему.

Другие вопросы по теме