不会调用构造函数中的代码。我必须调用一个额外的函数来调用代码。
测试代码:
public class SourceClass {
static ArrayList<String> line = new ArrayList<String>();
static ArrayList<ArrayList> description = new ArrayList<ArrayList>();
static ArrayList<ArrayList> descGroup = new ArrayList<ArrayList>();
public void SourceClass () {
//Does not work.
String testLine = new String("1 v1 v2 v3");
String[] testLineSplit = testLine.split(" ");
for (int i = 0; i < testLineSplit.length;i++) {
line.add(testLineSplit[i]);
}
description.add(line);
descGroup.add(description);
}
public void Populate() {
//works
String testLine = new String("1 v1 v2 v3");
String[] testLineSplit = testLine.split(" ");
for (int i = 0; i < testLineSplit.length;i++) {
line.add(testLineSplit[i]);
}
description.add(line);
descGroup.add(description);
}
public String GetDescGroup() {
return descGroup.get(0).get(0).toString();
}
}
正在测试的代码:
dict1={1:["item", "word", "thing"], 2:["word", "item"], 3:["thing", "item", "item"]}
相同的代码在Populate()和SourceClass()
中当调用一个函数来获取ArrayList时,它只是变为空
答案 0 :(得分:2)
您的方法SourceClass有一个返回类型 void ,这使它成为一个方法,而不是一个构造函数。因此,当您使用新的SourceClass创建对象时,它会调用默认的空构造函数
构造函数必须是:
public SourceClass () {
....
}
答案 1 :(得分:0)
定义构造函数时,不要给它返回值。
在你的代码中:
public void SourceClass () {
//Does not work.
String testLine = new String("1 v1 v2 v3");
String[] testLineSplit = testLine.split(" ");
for (int i = 0; i < testLineSplit.length;i++) {
line.add(testLineSplit[i]);
}
description.add(line);
descGroup.add(description);
}
这不是构造函数,只是类的一个方法,它与类同名并返回void。
在这种情况下,由于Java了解您没有提供任何构造函数,因此java提供了一个没有参数的默认构造函数。在测试代码中,调用此默认构造函数,而不是SourceClass
方法。
要修复它,只需从构造函数声明中删除'void'。