Android 抽象 类 糟糕的魔法空指针

Android abstract classes bad magic nullpointer

我为 RecycledView 编写了适配器,它使用 2 种类型的项目。因此 ViewHolder 有三个 classes:Base class 和 2 个它的实现。

public abstract class AbstractCatalogItemViewHolder extends RecyclerView.ViewHolder {
    public WebImageView icon;
    ...      
    public AbstractCatalogItemViewHolder(View itemView) {
        super(itemView);
    }
}

public  class CategoryViewHolder extends AbstractCatalogItemViewHolder {
    public CategoryViewHolder(View itemView) {
        super(itemView);
        icon = (WebImageView) itemView.findViewById(R.id.icon);
        ...
    }
}

问题是第二个图标指向对象 (WebImageView),但第一个是 null。怎么可能?

@Override
public void onBindViewHolder(AbstractCatalogItemViewHolder abstractViewHolder,
                             final int position) {

    int type =  getItemViewType(position);

    WebImageView icon = abstractViewHolder.icon;
    WebImageView icon2 =  ((CategoryViewHolder)   abstractViewHolder).icon;
    ...
}

onCreateViewHolder:

  @Override
    public AbstractCatalogItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        int type =  getItemViewType(i);

        View v = inflater.inflate(
                type == TYPE_CATEGORY ?
                        R.layout.item_category :
                        R.layout.item_product,
                viewGroup, false);

        return type == TYPE_CATEGORY ? new CategoryViewHolder(v) : new ProductViewHolder(v);
    }

传入 onCreateViewHolder 的 int 已经是 itemType,删除对 onCreateViewHolder 内部的 getItemViewType 的调用。