所以我希望通过创建一个名为 SearchableModel
的抽象类来变得聪明。看起来像这样:
public abstract class SearchableModel {
public abstract String getId();
public abstract String getName();
}
然后创建一个 RecyclerViewAdapter,它适用于任何扩展此抽象类的类。我的具体类(class)如下所示:
public class School extends SearchableModel{
@SerializedName("external_school_id")
private String id;
@SerializedName("name")
private String name;
@Override
public String getId() {
return id;
}
@Override
public String getName() {
return id;
}
}
RecyclerViewAdapter 是这样的:
public class SearchableItemAdapter extends RecyclerView.Adapter<SearchableItemAdapter.ViewHolder> {
private List<SearchableModel> items;
public SearchableItemAdapter(List<SearchableModel> items) {
this.items = items;
}
@Override
public SearchableItemAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(SearchableItemAdapter.ViewHolder holder, int position) {
SearchableModel item = items.get(position);
holder.nameText.setText(item.getName());
}
@Override
public int getItemCount() {
return items.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder{
@BindView(R.id.text_list_name)
TextView nameText;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
我的想法是我可以简单地定义一个 List<School> schools
然后使用 new SearchableItemAdapter(schools)
将其应用到构造函数中的适配器。但是,当我尝试此操作时,出现以下错误:
Incompatible Types. Required List<SearchableModel>. Found List<School>
我的理解是,既然 School 扩展了 SearchableModel,它应该可以用来代替它。我对继承在 Java 中的工作方式完全偏离了基础,还是这里发生了其他事情?
最佳答案
您应该使用List<? extends SearchableModel> items
相反。
您误解了它的工作原理,这篇文章解释得非常好:
https://stackoverflow.com/a/3009779/2877453
关于java - 使用抽象类作为 RecyclerView Adapter 的基础?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45133001/