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

我有一个类BaseViewHolder,它是基类和它的子类MyViewHolder。


我有一个不同的抽象类,BaseAdapter它需要子类来实现返回的子类的方法BaseViewHolder。我试过了:


protected abstract <T extends BaseViewHolder > Class<T> getViewHolderClass();

然后,创建一个class MyAdapter,它是它的子类,BaseAdapter并实现该getViewHolderClass方法:


@Override

protected <T extends BaseViewHolder > Class<T> getViewHolderClass() {

    return MyViewHolder.class;

}

但是我得到了:


Incompatible types.

Required: Class<T>

Found: Class<path.to.my.package.MyViewHolder>

如何使getViewHolderClass返回一类是或源自 BaseViewHolder(避免不必要的铸造更一般的类别或者?,当然)?我在StackOverflow上找到的最接近的方法是:如何使方法返回类型通用?但这涉及返回类实例,而我正试图返回一个类本身。


缥缈止盈
浏览 252回答 3
3回答

湖上湖

您需要使用?通配符。@Overrideprotected Class<? extends BaseViewHolder> getViewHolderClass() {&nbsp; &nbsp; return MyViewHolder.class;}

杨魅力

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

开满天机

你需要指定MyAdapter的T为MyViewHolder:public class MyAdapter extends BaseAdapter<MyViewHolder> {&nbsp; &nbsp; @Override&nbsp; &nbsp; protected Class<MyViewHolder> getViewHolderClass() {&nbsp; &nbsp; &nbsp; &nbsp; return MyViewHolder.class;&nbsp; &nbsp; }&nbsp; &nbsp; // Other methods...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java