簡體   English   中英

應用於方法參數的通用類型 - 避免類型擦除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM