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

Java中如何将ArrayList从一个方法传递至另一个方法并填充数据?

问题解决方法

你的问题核心是变量作用域的问题:shapes是start()方法里的局部变量,只能在start()内部访问,create()方法根本看不到它,所以会报“无法识别shapes”的错误。下面给你两种可行的修复方案:

方案一:将shapes作为参数传递给create()

这是最贴合你需求(创建列表后传递引用)的方式,直接把列表的引用传给create()方法:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;

public class Test {
    public static void start() {
        ArrayList<Object> shapes = new ArrayList<>();
        // 调用create时传入shapes的引用
        create(shapes);
    }

    // 修改create方法,添加ArrayList参数
    public static void create(ArrayList<Object> shapes) {
        // IO操作必须处理异常,这里用try-with-resources自动关闭资源
        try (BufferedReader file = new BufferedReader(new FileReader("dataFile.txt"))) {
            // 字符串比较不能用==,要用equals()判断内容
            String line = file.readLine();
            if ("Rectangle".equals(line)) {
                String shapeType = file.readLine();
                String name = file.readLine();
                Double length = Double.valueOf(file.readLine());
                Double width = Double.valueOf(file.readLine());
                Shape.Rectangle newShape = new Shape.Rectangle(name, length, width);
                shapes.add(newShape); // 现在可以正常访问shapes了
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

方案二:把shapes改成类的静态成员变量

如果你的类里有多个方法需要操作这个列表,可以把它提升为类的静态变量,这样所有静态方法都能直接访问:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;

public class Test {
    // 定义为类的静态成员变量,类内所有静态方法可访问
    private static ArrayList<Object> shapes;

    public static void start() {
        shapes = new ArrayList<>();
        create();
    }

    public static void create() {
        try (BufferedReader file = new BufferedReader(new FileReader("dataFile.txt"))) {
            String line = file.readLine();
            if ("Rectangle".equals(line)) {
                String shapeType = file.readLine();
                String name = file.readLine();
                Double length = Double.valueOf(file.readLine());
                Double width = Double.valueOf(file.readLine());
                Shape.Rectangle newShape = new Shape.Rectangle(name, length, width);
                shapes.add(newShape);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

额外注意事项

  1. 字符串比较永远不要用==,==比较的是对象引用地址,要用equals()判断字符串内容;
  2. IO操作必须处理异常,上述代码用了try-with-resources语法,会自动关闭BufferedReader,避免资源泄漏;
  3. 建议把ArrayList<Object>改成ArrayList<Shape.Rectangle>或者ArrayList<Shape>(如果存在Shape父类的话),这样类型更安全,避免后续强制转换的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:27:29