You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java拆分Main、Foods、Print三类协作运行空输出问题求解

解决方案

问题核心是Main类和Print类各自持有独立的Foods实例,只需要让Print类复用Main中已经填充好数据的Foods实例即可,以下是两种符合解耦要求的实现方式:


方案1:给打印方法传入Foods实例参数

该方式灵活性最高,适合每次打印可能需要传入不同Foods对象的场景,修改代码如下:

修改后的Print类

public class Print {
    // 方法新增Foods类型入参,接收外部传入的实例
    public void printFoods(Foods foods) {
        for (int i=0; i<foods.sizeFood(); i++) {
            System.out.println(foods.getFood(i));
        }
    }
}

修改后的Main类调用逻辑

public class Main {
    public static void main(String[] args) {
        Foods foods = new Foods();
        Print print = new Print();
        
        foods.addFood("Beer");
        foods.addFood("Tequila");
        
        // 调用时把已经填充完数据的foods实例传入
        print.printFoods(foods);
    }
}

方案2:通过Print类构造方法绑定Foods实例

如果同一个Print实例需要多次打印同一个Foods列表,适合把Foods作为Print的成员变量初始化,减少重复传参:

修改后的Print类

public class Print {
    // 成员变量存储外部传入的Foods实例
    private Foods foods;
    
    // 构造方法要求传入Foods实例完成绑定
    public Print(Foods foods) {
        this.foods = foods;
    }
    
    public void printFoods() {
        for (int i=0; i<foods.sizeFood(); i++) {
            System.out.println(foods.getFood(i));
        }
    }
}

修改后的Main类调用逻辑

public class Main {
    public static void main(String[] args) {
        Foods foods = new Foods();
        // 初始化Print时就绑定已经创建的foods实例
        Print print = new Print(foods);
        
        foods.addFood("Beer");
        foods.addFood("Tequila");
        
        print.printFoods();
    }
}

补充说明

你之前尝试的static方案虽然可以实现(比如把Foods实例设为Main类的public static变量,Print类直接调用Main.foods),但会造成类之间的强耦合,后续如果需要同时管理多个食品列表会很难扩展,不推荐使用。上述两种方案都能维持三类的职责拆分,不会破坏你要的解耦设计。

内容的提问来源于stack exchange,提问作者rustyprogrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:57:03