Любой объект, который расширяет указанный класс как параметр в функции - PullRequest
0 голосов
/ 06 июня 2019

Я строю базовую активность, где у меня есть метод инициализации RecyclerView.Я хочу, чтобы этот метод имел параметр, который является объектом / классом, который расширяет PagedListAdapter<object, object extends RecyclerView.ViewHolder.

Допустим, у меня есть класс myAdapter, который расширяет PagedListAdapter<myDataObject, myAdapter.ViewHolder>, и я хочу присоединить myAdapter как адаптер в RecyclerView, используя мой метод:

из Активность:

fun foo() = initRecyclerView(myAdapter())

, а затем в моей базе :

protected fun initRecyclerView(mAdapter: Class<out PagedListAdapter<Any, out RecyclerView.ViewHolder>>) {
    if (mRecyclerView?.layoutManager == null)
        mRecyclerView?.layoutManager = component.linearLayoutManager
    if (mRecyclerView?.adapter == null)
        mRecyclerView?.adapter = mAdapter
}

но я получаю Type mismatch:
Требуется: (RecyclerView.Adapter<RecyclerView.ViewHolder>?..RecyclerView.Adapter<*>?) Найдено: Class<out PagedListAdapter<Any, out RecyclerView.ViewHolder>>

Как это исправить, чтобы сделать этот метод "универсальным", чтобы принятьлюбой тип, который расширяет PagedListAdapter<object, any extends RecyclerView.ViewHolder>?

1 Ответ

2 голосов
/ 06 июня 2019

Ваш параметр - Class<out PagedListAdapter<Any, out RecyclerView.ViewHolder>>, который является экземпляром класса java.lang.Class, но вам нужен экземпляр PagedListAdapter, например:

protected fun initRecyclerView(mAdapter: PagedListAdapter<out Any, out RecyclerView.ViewHolder>) {
    if (mRecyclerView?.layoutManager == null)
        mRecyclerView?.layoutManager = component.linearLayoutManager
    if (mRecyclerView?.adapter == null)
        mRecyclerView?.adapter = mAdapter
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...