为了账号安全,请及时绑定邮箱和手机立即绑定

返回类子类型的Java方法(不是实例,类本身)

返回类子类型的Java方法(不是实例,类本身)

缥缈止盈 2021-05-12 13:13:40
我有一个类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;

}


查看完整回答
反对 回复 2021-05-26
?
杨魅力

TA贡献1811条经验 获得超6个赞

getViewHolder方法不需要通用,可以返回Class<? extends BaseViewHolder>

代码无法编译的原因是返回类型始终为,尽管通用方法签名暗示可以,但返回类型Class<MyViewHolder>不允许像这样的调用adapter.<AnotherViewHolder>getViewHolder()


查看完整回答
反对 回复 2021-05-26
?
开满天机

TA贡献1786条经验 获得超13个赞

你需要指定MyAdapter的T为MyViewHolder:


public class MyAdapter extends BaseAdapter<MyViewHolder> {


    @Override

    protected Class<MyViewHolder> getViewHolderClass() {

        return MyViewHolder.class;

    }


    // Other methods...


查看完整回答
反对 回复 2021-05-26
  • 3 回答
  • 0 关注
  • 251 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信