public static abstract class ViewHolder<T> extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
public abstract void bindItem(T item);
}
有没有办法确保bindItem(T item)
参数T正好是T而不是Object? (因为Type erasure将方法参数类型T替换为Object,因为它是无界的。)
这就是我最终实现抽象类的方法:
static class EventHolder extends ViewHolder {
@Override
public void bindItem(Object item) {
}
}
导致bindItem
参数类型为Object
,因为ViewHolder的raw type已经过子类化。
应该是
static class EventHolder extends ViewHolder<Event> {
@Override
public void bindItem(Event item) {
}
}
强制使用正确的参数类型。
对不起。深夜编码=愚蠢的错误。
答案 0 :(得分:0)
您可以将泛型类型缩小到所需的范围,例如:
public static abstract class ViewHolder<T extends SuperItem>
...
}
因此,如果存在非声明类型的对象,则此类中的任何位置都会收到编译时警告。