【发布时间】: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