首页 > 解决方案 > 在 instanceof 检查后无法调用具有类型的方法

问题描述

我有一份杂货清单,里面存放了一些食物和饮料。Grocery 是一个抽象类,Food 和 Beverage 都扩展了它。

我在 Grocery 中创建了一个静态方法来将杂货列表保存在文件中。此方法扫描整个列表,并且对于其中的每个元素,如果元素是食物,它应该调用 Food 类中的 saveToFile 方法,如果元素是饮料,它应该调用 Beverage 类中的 saveToFile 方法。

public static void saveListToFile(ArrayList<Grocery> groceries) {
    for(int i = 0; i < groceries.size(); i++) {
        if(groceries.get(i) instanceof Food) {
            Food.saveToFile(groceries.get(i));
        }
        else
            Beverage.saveToFile(groceries.get(i));
    }
}

这不编译。相反,我收到以下错误:Food 类型中的方法 saveToFile() 不适用于参数(Grocery)。

标签: java

解决方案


正如azurefrog 所建议的,我在 Grocery 中编写了一个抽象的 saveToFile 方法:

public abstract void saveToFile();

然后我像这样重写了 saveListToFile:

public static void saveListToFile(ArrayList<Grocery> groceries) {
    for(Grocery item: groceries)
        item.saveToFile();
}

这种方式之所以有效,是因为它使用多态性并在每个项目的适当类中运行适当的方法。

谢谢!


推荐阅读