java - 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 为什么仍然会出现编译错误?我已经发布了通用回收器视图的整个代码,因为它会非常混乱,所以这是现在的视图持有者类。
解决方案
改成BaseViewHolder<Shirt,OnRecyclerClickListener<? extends Item>>
,BaseViewHolder<Shirt,OnRecyclerClickListener<Shirt>>
因为? extends Item
未必Shirt
。
推荐阅读
- django - 无法设置 PeriodicTask 计划
- c# - 如何在文件列表框中获取文件信息?
- ios - 在绑定调用中使用 SwiftUI ForEach 的迭代器变量
- r - 无法在 R 中创建降价文档
- swift - 是否可以在 iOS 上使用 AudioKit 通过 HFP 将音频从 iPhone 内置麦克风流式传输到耳机?
- asp.net-mvc - ASP.Net core + wind auth + 自定义角色:“主域和可信域之间的信任关系失败”
- c# - EF Core LINQ Where with extension 方法未转换为 SQL
- sql - sqlite 上的 SQL Group By 和 COALESCE 问题
- html - Bootstrap:将分页与动态选项卡式界面结合起来 Bug
- mysql - mysql group by和两个总和之间的比率