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

时间:2018-07-14 12:46:02

标签: java generics

我有一个类@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new AsyncTask<Void, Void, Void>(){ @Override protected Void doInBackground(Void... voids) { initBluetooth(); //Perform any operations return null; } @Override protected void onPostExecute(Void aVoid) { startActivity(Bluetooth.this, register.java); } }.execute(); } (它是基类)和它的子类BaseViewHolder

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

BaseViewHolder

然后,我创建一个类protected abstract <T extends BaseViewHolder > Class<T> getViewHolderClass(); ,它是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的类(而不必将其强制转换为更通用的类或{ {1}},当然)?我在StackOverflow上找到的最接近的是How do I make the method return type generic?,但这涉及到返回类 instances ,而我正在尝试返回一个类本身

3 个答案:

答案 0 :(得分:2)

您需要使用File folder通配符。

(Ext) File

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您需要将MyAdapter的{​​{1}}指定为T

MyViewHolder