Java 为什么RecyclerView适配器是泛型类
类签名是RecyclerView.Adapter。VH类型为 以RecyclerView.ViewHolder为边界 由于Java 为什么RecyclerView适配器是泛型类,java,android,android-recyclerview,Java,Android,Android Recyclerview,类签名是RecyclerView.Adapter。VH类型为 以RecyclerView.ViewHolder为边界 由于RecyclerView.ViewHolder是一个抽象类,VH的任何实例都由RecyclerView.ViewHolder继承 例如,onCreateViewHolder方法返回通用VH类型对象,该对象在任何情况下都从RecyclerView.ViewHolder继承。那么为什么不把RecyclerView.ViewHolder作为一个返回类型(而不是VH泛型类型)并把所有
RecyclerView.ViewHolder
是一个抽象类,VH的任何实例都由RecyclerView.ViewHolder
继承
例如,
onCreateViewHolder
方法返回通用VH类型对象,该对象在任何情况下都从RecyclerView.ViewHolder
继承。那么为什么不把RecyclerView.ViewHolder
作为一个返回类型(而不是VH泛型类型)并把所有这些东西都制作成没有泛型风格的呢?因为你想让RecyclerView.Adapter
的子类只处理一个特定的ViewHolder
类型
这就是为什么类签名允许您指定VH
类型。这样,该类将根据您的需要建模;方法onBindViewHolder
,onCreateViewHolder
将仅适用于处理您首选的ViewHolder
子类型
如果没有泛型,(上述方法将具有ViewHolder
而不是泛型VH
类型),您可以从onCreateViewHolder
返回SubViewHolder1
,并尝试将onBindViewHolder
的第一个参数强制转换为SubViewHolder2
(你会得到一个ClassCastException
)。不是说你会这么做,而是代码允许你这么做。那么为什么不设置一些约束来缓解你的生活呢
通过利用泛型类型,您可以说:
这是我的适配器
用于回收视图
。此适配器
仅处理此视图持有者
子类。除此之外,没有其他内容
设计模式视图保持架:我理解视图保持架模式。我不明白谷歌为什么将RecyclerView.Adapter设计为泛型类。例如,请参见
onBindViewHolder
方法,它将自定义ViewHolder
作为参数传递,并且您不必使用任何强制转换-这同样适用于许多其他适配器e> s方法在任何情况下,我的自定义ViewHolder都是由RecyclerVIew.ViewHolder派生的。因此,如果它是VH(通用)的RecyclerVIew.ViewHolder instad作为此方法中的传递参数,则不会有任何强制转换问题。如果我做对了,则发送base的派生类实例instad不会有任何问题。