首页 > 解决方案 > android java的泛型类型错误

问题描述

因此,我正在尝试创建一个通用类型适配器,因为我正在开发的 android 应用程序涉及创建许多类似的回收器视图适配器。我不断收到这个编译错误,说我的衬衫项目无法转换为项目类型。

error: incompatible types: Shirt cannot be converted to CAP#1
where CAP#1 is a fresh type-variable:
CAP#1 extends Item from capture of ? extends Item


class Shirt2ViewHolder extends BaseViewHolder<Shirt,OnRecyclerClickListener<? extends Item>> {

    public Shirt2ViewHolder(View itemView) {
        super(itemView);

    }

    @Override
    public void onBind(final Shirt item, @Nullable final OnRecyclerClickListener<? extends Item> listener) {
        descriptionText.setText(item.getmName());
        Glide.with(itemView.getContext()).load(item.getmImageUrl()).into(imageView);

        if (listener != null) {
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    listener.onItemClicked(view,item); // error is here 
                }
            });
        }
    }
}

OnRecyclerClickListener 接口:

public interface OnRecyclerClickListener<T extends Item> extends BaseRecyclerListener {


public void onItemClicked(View itemView, T item);

}

BaseRecycler接口:

public interface BaseRecyclerListener {

}

衬衫类:

public class Shirt extends Item {



public Shirt() {}


public Shirt(String mName, String mColor, String mImageUrl) {
    super(mName,mColor,mImageUrl);
    }
}

由于我的 Shirt 扩展了 Item 并且在我的 OnRecyclerClickListener 我的 T 扩展了 Item 为什么仍然会出现编译错误?我已经发布了通用回收器视图的整个代码,因为它会非常混乱,所以这是现在的视图持有者类。

标签: javaandroidgenericsinheritance

解决方案


改成BaseViewHolder<Shirt,OnRecyclerClickListener<? extends Item>>BaseViewHolder<Shirt,OnRecyclerClickListener<Shirt>>因为? extends Item未必Shirt


推荐阅读