我正在尝试对我的应用程序中的所有RecyclerView.Adapter
使用通用扩展功能,因此我创建了一个名为notifyAdapter的ext娱乐程序,但它没有按预期工作。
fun <T> RecyclerView.Adapter<RecyclerView.ViewHolder>.notifyAdapter() {
updateAll()
notifyDataSetChanged()
}
当我使用
offlineListAdapter.notifyAdapter()
或onlineListAdapter.notifyAdapter()
它抛出
OfflineListAdapter.kt
class OfflineListAdapter : RecyclerView.Adapter<OfflineListAdapter.OfflineListHolder>() {
class OfflineListHolder(view: View) : RecyclerView.ViewHolder(view) {
}
}
如何使用泛型为所有
RecyclerView.Adapter
创建通用扩展功能。提前致谢。
最佳答案
有两种方法可以做到这一点。
ViewHolder
方差标记out
参数。这样,您的函数就不是通用的,因此您将无法访问其中的ViewHolder
的确切类型。fun RecyclerView.Adapter<out RecyclerView.ViewHolder>.notifyAdapter() { ... }
ViewHolder
的子类。这样,您可以在函数内部使用T
,例如,您可以根据需要创建listOf<T>()
。fun <T : RecyclerView.ViewHolder> RecyclerView.Adapter<T>.notifyAdapter() { ... }
Adapter
类的type参数具有ViewHolder
的上限。fun RecyclerView.Adapter<*>.notifyAdapter() { ... }
您可以在官方文档here中详细了解方差和预测。