【问题标题】:Generic type error for android javaandroid java的泛型类型错误
【发布时间】:2018-12-28 07:16:08
【问题描述】:

所以我正在尝试创建一个通用类型适配器,因为我正在开发的 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);

}

BaseRecylcer接口:

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 为什么仍然会出现编译错误?我已经发布了通用回收器视图的整个代码,因为它会非常混乱,所以这是现在的视图持有者类。

【问题讨论】:

    标签: java android generics inheritance


    【解决方案1】:

    BaseViewHolder&lt;Shirt,OnRecyclerClickListener&lt;? extends Item&gt;&gt; 更改为BaseViewHolder&lt;Shirt,OnRecyclerClickListener&lt;Shirt&gt;&gt;,因为? extends Item 可能不是Shirt

    【讨论】:

    • 它在更改后工作,但我似乎不明白为什么,因为衬衫从项目延伸。这是否与无法添加到类型 ?
    • 如果你用? extends Item你实际上是说? extends ItemShirt,那不是真的,正确的是Shirt? extends Item
    • ? extends Item 无法推断出?Shirt
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多