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
相关产品推荐
相关产品推荐

