Class signature is RecyclerView.Adapter<"VH extends android.support.v7.widget.RecyclerView.ViewHolder">. VH type is bounded by RecyclerView.ViewHolder.
Поскольку RecyclerView.ViewHolder является абстрактным классом, любой экземпляр VH наследуется RecyclerView.ViewHolder.
Например, метод onCreateViewHolder возвращает объект универсального типа VH, который в любом случае наследуется от RecyclerView.ViewHolder. Так почему бы просто не сделать RecyclerView.ViewHolder как возвращаемый тип (вместо универсального типа VH) и не сделать все это без универсального стиля?
а это ссылка на сайт
Я понимаю шаблон View Holder. Я не понимаю, почему Google разработал RecyclerView.Adapter как общий класс.
см., например, метод onBindViewHolder, он передает ваш собственный ViewHolder в качестве параметра, и вам не нужно использовать какие-либо приведения - то же самое относится ко многим другим методам Adapters
В любом случае мой пользовательский ViewHolder является производным от RecyclerVIew.ViewHolder. Поэтому, если бы это был RecyclerVIew.ViewHolder вместо VH (общий) в качестве параметра передачи в этих методах, проблем с приведением не возникло. Если я правильно понял, проблем не будет, отправить экземпляр производного класса вместо базы.
Теперь пользователю придется вручную отливать держатель, даже если у вас в адаптере был только 1 подтип viewholder.
Вы можете передать RecyclerView.ViewHolder, если хотите, но вам нужно выполнить приведение типов, если вы хотите использовать свой собственный держатель. Кроме того, это полезно, когда вам нужно использовать несколько ViewHolder для одного адаптера.
Теперь я вижу. Это необходимо при переопределении onBindViewHolder при вызове пользовательских методов ViewHolder. Вы мне помогли, большое спасибо!




Потому что вы хотите, чтобы ваш подкласс RecyclerView.Adapter имел дело только с определенным типом ViewHolder.
Вот почему сигнатура класса позволяет вам указать тип VH. Так что класс будет смоделирован в соответствии с вашими потребностями; методы onBindViewHolder, onCreateViewHolder будут адаптированы для работы только с вашим предпочтительным подтипом ViewHolder.
Без дженериков (методы, упомянутые выше, будут иметь ViewHolder, а не общий тип VH), вы можете вернуть SubViewHolder1 из onCreateViewHolder и попытаться преобразовать первый параметр onBindViewHolder в SubViewHolder2 (и вы получите ClassCastException). Не то чтобы вы это сделали, но код позволяет вам это делать. Так почему бы не установить некоторые ограничения, которые облегчили бы вашу жизнь?
Воспользовавшись универсальным типом, вы говорите:
This is my
Adapterfor aRecyclerView. ThisAdapterdeals with only thisViewHoldersub-class. Nothing else.
Держатель вида образца дизайна: Удерживать объекты просмотра в держателе представления