【问题标题】:Static ArrayList being empty when called from another class从另一个类调用时静态 ArrayList 为空
【发布时间】:2022-01-29 07:56:19
【问题描述】:

在 classC 中,我从 csv 文件中读取并将它们放入 classA 对象,然后放入作为 class A 的子类的 arraylist classB

public class classC {
    public static ArrayList<classA> arraylist= new ArrayList<>();

    private classC() {
        // do not instantiate
    }

    public static ArrayList<classA> readData(File inFile) {
        try {
            Scanner reader = new Scanner(inFile);
            String header = reader.nextLine();
            
            while (reader.hasNextLine()) {
                String nextLine = reader.nextLine();

                //System.out.println(nextLine);
                
                String[] tokens = nextLine.split(",");
                String a= tokens[0];
                double b= Double.parseDouble(tokens[1]);
                double c= Double.parseDouble(tokens[2]);
                double d= Double.parseDouble(tokens[3]);
                double e=Double.parseDouble(tokens[4]);

                //store the data in classa object
                classA classa= new classA(a, b, c, d, e);

                //store each object in an arraylist
                arraylist.add(classa);
            }

            for (int i = 0; i < arraylist.size(); i++) {   //these prints fine
                System.out.println(arraylist.get(i) + " ");
            }

            System.out.println(arraylist.size());

            return arrayList;
    }
}

然后在 B 类中,我尝试打印数组,但数组列表为空

public class classB extends ArrayList<classA> {
    public static ArrayList<classA> arraylist = new ArrayList<>();

    public classB() {
    }

    //here is my method to print
    public void printArray() {
        System.out.println("Elements of ArrayList are:");
        System.out.println(arraylist.size()); //prints 0
    }
}

在我的主要方法中

public class Main {
    public static void main(String[] args) {
        File inFile = new File("file.csv");
        readData(inFile);
        classB classb = new classB();
        classb.printArray();
    }
}

在 classA 中,我有必要的 getter setter 和 toString 方法来正确打印,我可以从 classC readData 方法打印,但不能从 classB printArray 方法打印。

谁能告诉我我做错了什么?

【问题讨论】:

  • 在B类中,将arraylist.size()改为super.arraylist.size()
  • 如果我做 super.arraylist.size() 它不起作用,它会给我错误找不到符号变量 arraylist
  • 每次调用new ArrayList(),都会创建一个新的empty实例-classB的列表与classC中的列表无关(可怕的类命名顺便说一句)-为什么classB 扩展了ArrayList??
  • so classB arrayList 是空的,因为它是在那里实例化的,所以无论如何要从 classC readData 方法中获取 arraylist 吗?

标签: java arrays arraylist methods static


【解决方案1】:

你的 B 类不是 A 类的子类,它是 ArrayList 的子类。您可能应该将其声明更改为extends classC。之后还需要去掉classB中arrayList字段的声明,否则会屏蔽超类classC中同名字段的声明。

【讨论】:

  • 如果我在classB中删除arraylist的声明,我如何打印出classB中的数组?
  • 我们不知道 classA 是什么(只是它可能有 5 个属性)- 可能你的意思是 extends classC(正如我已经评论过的,可怕的类名)
  • classA只有构造函数必要的setter getter和toString方法,classA中没有实例化arrayList。
  • 是的,你需要扩展classC,而不是classA。
  • 非常感谢 Alex,我做到了,并删除了 classB 中的 arrayList 声明,它成功了!我只需要删除声明就可以了。
猜你喜欢
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2013-10-18
相关资源
最近更新 更多