RecyclerView.Adapter Android的泛型

RecyclerView.Adapter Android的泛型,android,kotlin,android-recyclerview,kotlin-extension,Android,Kotlin,Android Recyclerview,Kotlin Extension,我正在尝试为我的应用程序中的所有RecyclerView.Adapter使用一个通用扩展函数,因此我创建了一个名为notifyAdapter的ext-fun,但它没有按预期工作 fun <T> RecyclerView.Adapter<RecyclerView.ViewHolder>.notifyAdapter() { updateAll() notifyDataSetChanged() } 如何使用泛型为所有RecyclerView.Adapter创建

我正在尝试为我的应用程序中的所有
RecyclerView.Adapter
使用一个通用扩展函数,因此我创建了一个名为notifyAdapter的ext-fun,但它没有按预期工作

fun <T> RecyclerView.Adapter<RecyclerView.ViewHolder>.notifyAdapter() {
    updateAll()
    notifyDataSetChanged()
}
如何使用泛型为所有
RecyclerView.Adapter
创建通用扩展函数


提前感谢。

有几种方法可以做到这一点

  • 您可以使用
    out
    方差标记
    ViewHolder
    参数。这样,您的函数就不是泛型的,因此您将无法访问其中的
    ViewHolder
    的确切类型

    fun RecyclerView.Adapter<out RecyclerView.ViewHolder>.notifyAdapter() {  ...  }
    
  • 最后,您还可以使用星体投影,我相信在本例中,星体投影将给出与第一个解决方案完全相同的结果,因为
    Adapter
    类的type参数的上限为
    ViewHolder

    fun RecyclerView.Adapter<*>.notifyAdapter() {  ...  }
    
    fun RecyclerView.Adapter.notifyAdapter(){…}
    
  • 您可以在官方文档中阅读有关差异和预测的更多详细信息

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