拆分Java类后无法向ArrayList添加对象,请求代码问题排查
问题排查:拆分OOP类后无法向ArrayList添加元素
问题根源
你的代码中存在两个独立的Calculator实例:
- Main类中创建了一个
Calculator calc对象 - UserInterface的构造方法里又新建了另一个
Calculator对象
UI中调用calculator.addNumber()时,操作的是它内部自己创建的Calculator实例;而Main类打印的是另一个完全独立的实例,所以输出为空列表,看起来像是元素没被添加。
修复方案
修改UserInterface的构造方法,改为接收外部传入的Calculator实例,确保整个程序共享同一个对象:
修改后的Main类代码
public class Main { public static void main(String[] args) { // 先创建Calculator实例 Calculator calc = new Calculator(); // 将该实例传入UserInterface UserInterface ui = new UserInterface(calc); ui.start(); System.out.println(calc.getNumbers()); } }
修改后的UserInterface类代码
import java.util.Scanner; public class UserInterface { private Calculator calculator; private Scanner scanner; // 构造方法接收外部传入的Calculator实例 public UserInterface(Calculator calculator) { this.calculator = calculator; scanner = new Scanner(System.in); } public void start() { int input; while (true) { System.out.println("Enter point totals, -1 stops:"); input = scanner.nextInt(); if (input == -1) { break; } if (input >= 0 && input <= 100) { calculator.addNumber(input); } } } }
Calculator类保持不变
import java.util.ArrayList; public class Calculator { private final ArrayList<Integer> numbers; public Calculator() { numbers = new ArrayList<>(); } public void addNumber(int number) { numbers.add(number); } public ArrayList<Integer> getNumbers() { return numbers; } }
修复原理
通过依赖注入的方式,让UserInterface使用外部提供的Calculator实例,确保Main和UI操作的是同一个对象。这样UI中添加的元素会被存储到Main类持有的Calculator实例的ArrayList中,最终打印时就能看到正确的结果。
内容的提问来源于stack exchange,提问作者Lirzhan
相关产品推荐
相关产品推荐

