繁体   English   中英

Java泛型 - 抽象类抽象函数覆盖

[英]Java Generics - Abstract Classes abstract function override

我正在尝试在 android 中实现基本抽象类。

我的基本抽象类是 BaseItemPresenter 类。 课程如下:

public abstract class BaseItemPresenter<T extends MvpView> extends BasePresenter<T> {

    public abstract void loadFromDevice();

    public abstract void loadFromFile();

    public abstract void backup(List<? extends BaseBackupItem> list);

    public abstract void delete(List<? extends BaseBackupItem> list);

    public abstract void restore(List<? extends BaseBackupItem> list);

    public abstract void sort(int sortType, boolean isAscending);

    public abstract void sort(List<? extends BaseBackupItem> list, int sortType, boolean isAscending);

    public abstract void filter(List<? extends BaseBackupItem> list, Class<? extends MvpView> filterOptions);
}

我正在使用 ItemPresenter1 类实现这个类。 代码如下:

public class ItemPresenter1 extends BaseItemPresenter<MvpView> {

    @Override
    public void loadFromDevice() {

    }

    @Override
    public void loadFromFile() {

    }

    @Override
    public void backup(List<Item1> list) {

    }

    @Override
    public void delete(List<Item1> list) {

    }

    @Override
    public void restore(List<Item1> list) {

    }

    @Override
    public void sort(int sortType, boolean isAscending) {

    }

    @Override
    public void sort(List<Item1> list, int sortType, boolean isAscending) {

    }

    @Override
    public void filter(List<Item1> list, Class<View1> filterOptions) {

    }
}

Item1 类是扩展 BaseBackupItem 类。 View1 类是扩展 MvpView 类。

public class Item1 extends BaseBackupItem {

}

public class View1 extends MvpView {

}

那么,我应该如何解决这个问题:

从 :

public abstract void backup(List<? extends BaseBackupItem>);

到 :

@Override
public void backup(List<Item1>);

错误 :

Method does not override method from its superclass.

您需要向BaseItemPresenter的类定义添加一个新的类型参数,以便将List的预期类型指定为下一个:

public abstract class BaseItemPresenter<T extends MvpView, I extends BaseBackupItem> 
    extends BasePresenter<T> {
    ...
    public abstract void backup(List<I> list);

    public abstract void delete(List<I> list);

    public abstract void restore(List<I> list);

    ...
}

然后你的类ItemPresenter1将被声明为下一个:

public class ItemPresenter1 extends BaseItemPresenter<MvpView, Item1 > {
    ...
    @Override
    public void backup(List<Item1> list) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM