我有一个类BaseViewHolder,它是基类和它的子类MyViewHolder。我有一个不同的抽象类,BaseAdapter它需要子类来实现返回的子类的方法BaseViewHolder。我试过了:protected abstract <T extends BaseViewHolder > Class<T> getViewHolderClass();然后,创建一个class MyAdapter,它是它的子类,BaseAdapter并实现该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条经验 获得超2个赞
您需要使用?通配符。
@Override
protected Class<? extends BaseViewHolder> getViewHolderClass() {
return MyViewHolder.class;
}
杨魅力
TA贡献1811条经验 获得超6个赞
该getViewHolder
方法不需要通用,可以返回Class<? extends BaseViewHolder>
。
代码无法编译的原因是返回类型始终为,尽管通用方法签名暗示可以,但返回类型Class<MyViewHolder>
不允许像这样的调用adapter.<AnotherViewHolder>getViewHolder()
。
开满天机
TA贡献1786条经验 获得超13个赞
你需要指定MyAdapter的T为MyViewHolder:
public class MyAdapter extends BaseAdapter<MyViewHolder> {
@Override
protected Class<MyViewHolder> getViewHolderClass() {
return MyViewHolder.class;
}
// Other methods...
添加回答
举报
0/150
提交
取消