2017-05-17 58 views
1
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? (由於類型擦除替換對象方法的參數類型T,因爲它是無限的。)適用於方法參數的通用類型 - 避免類型擦除

更新 - 意外原始類型的使用

這是我結束了實現抽象類:

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) { 

    } 
} 

迫使正確的參數類型。

對不起。深夜編碼=愚蠢的錯誤。

+3

你想解決什麼問題?總會有類型刪除。你只會得到編譯時間檢查。 –

+2

任何嘗試使用非'T'參數調用'bindItem'都會導致編譯器錯誤。這不是你想要的嗎? –

+0

您是否因爲擴展原始類型而在第一個'EventHolder'上發出警告? – newacct

回答

0

可以縮小通用型到需要的一切,例如:

public static abstract class ViewHolder<T extends SuperItem> 
    ... 
} 

所以這個類中的任何地方,你會得到一個編譯時警告,如果有未宣佈的類型的對象。

相關問題