簡體   English   中英

任何將指定類擴展為函數中參數的對象

[英]Any object that extends specified class as parameter in function

我正在建立基礎活動,在這里我有一種方法可以初始化RecyclerView 我希望此方法具有參數,該參數是擴展 PagedListAdapter<object, object extends RecyclerView.ViewHolder的對象/類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>類型PagedListAdapter<object, any extends RecyclerView.ViewHolder>

您的參數是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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM