[英]Generic Type applied to method parameter - avoid Type erasure
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的原始類型是子類。
本來應該
static class EventHolder extends ViewHolder<Event> {
@Override
public void bindItem(Event item) {
}
}
這會強制使用正確的參數類型。
抱歉。 深夜編碼=愚蠢的錯誤。
您可以將泛型類型縮小到所需的范圍,例如:
public static abstract class ViewHolder<T extends SuperItem>
...
}
因此,如果存在非聲明類型的對象,則此類中的任何位置都將獲得編譯時警告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.