我知道JAVA的通用概念=类型 和Android的Recycler View概念。
我已经知道了->扩展了RecyclerView.Adapter。在Android开发者网站上看到过。
但是,这仍然很难理解。
我正在查看Firebase的Cloud Firestore代码。
还有一些代码...
extends FirestoreAdapter<SomeClassAdapter.ViewHolder>
和
public abstract class FirestoreAdapter<VH extends RecyclerView.ViewHolder>
extends RecyclerView.Adapter<VH>
这些概念对我来说太难了... 一些泛型和一些扩展。
我已经做了很多搜索,并且已经做了很多思考。请您简单解释一下?或一些要引用的网站。
感谢您的阅读!任何种类的小费都无所谓。我会感激的!
答案 0 :(得分:0)
如果我用一个例子解释一下,也许会更容易理解:
假设我们有一个名为SomeClassAdapter
的适配器类,它有一个名为ItemViewHolder
的内部类,如下所示:
public class SomeClassAdapter extends FirestoreAdapter {
...
private class ItemViewHolder extends FirestoreAdapter.ViewHolder {
...
}
}
如果我们想使用内部类(SomeClassAdapter
)作为视图持有者来扩展ItemViewHolder
,我们将使用:
public class Example extends FirestoreAdapter<SomeClassAdapter.ItemViewHolder>
但是您提到的第二个概念是我们在示例中扩展的超类(它是抽象的,我们必须对其进行扩展并覆盖其抽象方法才能创建实例)
现在假设我们有一个类,该类需要一种类型才能在类声明中使用它。在这种情况下,我们声明一个类似FirestoreAdapter
的类,并在<..>
内部传递通用类型,例如:FirestoreAdapter<VH>
。如果我们需要VH
是另一个类似RecyclerView.ViewHolder
的类的子类型,我们将其声明为:FirestoreAdapter<VH extends RecyclerView.ViewHolder>
。
如果我们需要FirestoreAdapter
本身成为另一个类的子类型,例如RecyclerView.Adapter
怎么办?因此它将是FirestoreAdapter<VH extends RecyclerView.ViewHolder>
extends RecyclerView.Adapter
。在我们的示例中,RecyclerView.Adapter
类需要一个扩展了RecyclerView.ViewHolder
本身的泛型类型,我们想使用与FirestoreAdapter<VH>
相同的类型,因此我们只需将VH
作为泛型传递输入RecyclerView.Adapter
。得出一个结论,我们将得到:
FirestoreAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH>
答案 1 :(得分:0)
转换为人类语言,我们得到了这一点,通用 FirestoreAdapter 只会排除参数化类型的 ViewHolder 或其子类。最后它会从它的超类继承所有可用的字段,它是通用类 RecyclerView.Adapter
< VH 扩展 RecyclerView.ViewHolder >
有时您可能希望限制可用作参数化类型中的类型参数的类型。
许多开发人员交替使用术语“类型参数”和“类型参数”,但这些术语并不相同。编码时,提供类型参数以创建参数化类型。
我们可以将参数化类型视为我们的类型参数的正式实例化要实例化这个类,像往常一样使用 new 关键字,但放在类名和括号之间: Box integerBox = new Box();
要声明有界类型参数,请列出类型参数的名称,然后是 extends 关键字,然后是其上限
现在类型参数就是尖括号<>内的任何东西。 Source
话虽如此,我们可以得出结论,VH 只不过是一个类型参数,扩展 RecyclerView.ViewHolder 是说我们的泛型类只接受 ViewHolder 对象或其子类。
公共抽象类 FirestoreAdapter 扩展 RecyclerView.Adapter