我有一個類BaseViewHolder,它是基類和它的子類MyViewHolder。我有一個不同的抽象類,BaseAdapter它需要子類來實現(xiàn)返回的子類的方法BaseViewHolder。我試過了:protected abstract <T extends BaseViewHolder > Class<T> getViewHolderClass();然后,創(chuàng)建一個class MyAdapter,它是它的子類,BaseAdapter并實現(xiàn)該getViewHolderClass方法:@Overrideprotected <T extends BaseViewHolder > Class<T> getViewHolderClass() { return MyViewHolder.class;}但是我得到了:Incompatible types.Required: Class<T>Found: Class<path.to.my.package.MyViewHolder>如何使getViewHolderClass返回一類是或源自 BaseViewHolder(避免不必要的鑄造更一般的類別或者?,當然)?我在StackOverflow上找到的最接近的方法是:如何使方法返回類型通用?但這涉及返回類實例,而我正試圖返回一個類本身。
3 回答

湖上湖
TA貢獻2003條經(jīng)驗 獲得超2個贊
您需要使用?通配符。
@Override
protected Class<? extends BaseViewHolder> getViewHolderClass() {
return MyViewHolder.class;
}

楊魅力
TA貢獻1811條經(jīng)驗 獲得超6個贊
該getViewHolder
方法不需要通用,可以返回Class<? extends BaseViewHolder>
。
代碼無法編譯的原因是返回類型始終為,盡管通用方法簽名暗示可以,但返回類型Class<MyViewHolder>
不允許像這樣的調(diào)用adapter.<AnotherViewHolder>getViewHolder()
。

開滿天機
TA貢獻1786條經(jīng)驗 獲得超13個贊
你需要指定MyAdapter的T為MyViewHolder:
public class MyAdapter extends BaseAdapter<MyViewHolder> {
@Override
protected Class<MyViewHolder> getViewHolderClass() {
return MyViewHolder.class;
}
// Other methods...
添加回答
舉報
0/150
提交
取消