java - 使用抽象类作为 RecyclerView Adapter 的基础?

标签 java android inheritance

所以我希望通过创建一个名为 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/

相关文章:

java - 使用 JavaParser 使用 getExtendedType 查找继承

java - 是否可以在一种方法中获取锁并从另一种方法中释放它?

java - 在 xml 中使用 < 和 > 符号

Android Webview 未知错误

安卓和 iOS : How to develop for both?

c# - 如何在 C# 中基于现有委托(delegate)类型创建新的委托(delegate)类型?

java - sqlite 数据库连接 : java. Lang.ClassNotFoundException : org. sqlite.JDBC

android - 如何在 Smack 中启用 XEP-0199?

java - 如何从另一个类访问对象变量?

java - 为什么它打印这个而不打印那个?