java - 如何使用 "interface"作为输入参数?

标签 java android

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

我尝试将模型转换为接口(interface),它给了我“不兼容的类型”错误。

这是我所拥有的:

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);

最佳答案

所以我找到了解决方案。我必须转换列表。我将该方法添加到 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));

关于java - 如何使用 "interface"作为输入参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500757/

相关文章:

java - Android studio fragment 或新 Activity

java - 反序列化 session 数据时出现 InvalidClassException 错误

java - 选择了空值但不在 ComboBoxModel 中的 JComboBox 首选大小

Java链表实现

android - GsaIOException 缓冲区溢出,没有可用空间

android - 如何获取市场上 Android 应用程序的 .apk 网址?

java - 使用Windows身份验证在java中连接到远程MS sqlserver

java - 如何使用库 java web 应用程序

java - 如何将 ASCII 转换为十进制

android - 如何重定向到移动应用程序?