我有一些实现接口的模型,即它们都实现了特定的方法,我们称其为“ 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);
答案 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));