【问题标题】:Any object that extends specified class as parameter in function将指定类扩展为函数中的参数的任何对象
【发布时间】:2019-06-06 20:49:51
【问题描述】:

我正在构建基础活动,我有一个方法来初始化RecyclerView。 我希望这个方法有一个参数,它是一个扩展PagedListAdapter<object, object extends RecyclerView.ViewHolder的对象/类。

假设我有一个扩展 PagedListAdapter<myDataObject, myAdapter.ViewHolder> 的类 myAdapter,我想使用我的方法将 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&lt;RecyclerView.ViewHolder&gt;?..RecyclerView.Adapter&lt;*&gt;?) 找到:Class&lt;out PagedListAdapter&lt;Any, out RecyclerView.ViewHolder&gt;&gt;

如何修复它以使此方法“通用”,以接受任何扩展 PagedListAdapter&lt;object, any extends RecyclerView.ViewHolder&gt; 的类型?

【问题讨论】:

标签: android kotlin android-recyclerview


【解决方案1】:

您的参数是 Class&lt;out PagedListAdapter&lt;Any, out RecyclerView.ViewHolder&gt;&gt;,它是类 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
}

【讨论】:

    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多