簡體   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