Java 为什么RecyclerView适配器是泛型类

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.Adapter。VH类型为 以RecyclerView.ViewHolder为边界

由于
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不会有任何问题。