如何使用“接口”作为输入参数?

时间:2019-10-22 09:08:18

标签: java android

我有一些实现接口的模型,即它们都实现了特定的方法,我们称其为“ A”方法。现在,我有了一个方法为“ B”的类,该类应该调用方法“ A”。因此,我对其进行了定义,以便将接口作为输入参数,一切都很好。问题是当我将模型(实现接口)提供给方法“ B”时,它说类型不同。

我尝试将模型强制转换为接口,这会给我“不兼容的类型”错误。

这是我所拥有的:

public interface BaseObject<T> {
    boolean isEqualTo(T object); //AKA: method "A"
}

public interface BaseList<T extends BaseObject> {
    boolean areListsEqual(List<T> firstList, List<T> secondList);  //AKA: method "B"
}

public class Helper implements BaseList<BaseObject> {

    @Override
    public boolean areListsEqual(List<BaseObject> firstList, List<BaseObject> secondList) {
        boolean isEqual = true;
        ...
        for (int i = 0; i < firstList.size(); i++) {
                isEqual = isEqual && firstList.get(i).isEqualTo(secondList.get(i));
        }

        return isEqual;
        ...
      }
}

// I have different ones
public class MyModel implements BaseObject<MyModel>{
...
}

这是我得到错误的部分:

List<MyModel> first = new ArrayList<>(): 
List<MyModel> second = new ArrayList<>(): 
...
new Helper().areListsEqual(first, second);

// This is another thing I tried
new Helper().areListsEqual((List<BaseObject>) first, (List<BaseObject>) second);

1 个答案:

答案 0 :(得分:0)

所以我找到了解决方案。我不得不转换列表。我将方法添加到Helper类,并在将每个列表提供给“ areListsEqual”方法之前对其进行了转换。这是怎么回事:

    public List<BaseObject> convertList(List inputList){
        List<BaseObject> baseList = new ArrayList<>();

        if (inputList != null && inputList.size() > 0)
            baseList.addAll(inputList);

        return baseList;
    }

这就是我所说的:

Helper helper = new Helper();
helper.areListsEqual(helper.convertList(first), helper.convertList(second));