Java Android抽象类坏魔法空指针

Java Android抽象类坏魔法空指针,java,android,polymorphism,Java,Android,Polymorphism,我为RecycledView编写了适配器,它使用两种类型的项。因此,ViewHolder有三个类:基类和2个它的实现 public abstract class AbstractCatalogItemViewHolder extends RecyclerView.ViewHolder { public WebImageView icon; ... public AbstractCatalogItemViewHolder(View itemView) {

我为
RecycledView
编写了适配器,它使用两种类型的项。因此,ViewHolder有三个类:基类和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
的调用

你能在CreateViewHolder上显示你的
方法吗?@Dreagen当然。addedy您正在调用
getItemViewType(i)
,但是
i
实际上是
getItemViewType(position)
的结果,所以您不需要这样做。删除此呼叫并用
i
替换
type
,因为我看不到您的
ProductViewHolder
我不知道这是否也是设置
图标的原因,如果您未发布的另一个
ViewHolder
未正确设置图标,可能与此有关。看不到就很难说