无法在构造函数中添加到 ArrayLists
Can't add to ArrayLists in the constructor
构造函数中的代码未被调用。我必须调用一个附加函数来调用代码。
测试代码:
public static void main(String[] args){
SourceClass myClass = new SourceClass();
myClass.Populate();//If this line is removed it does not work
System.out.println(myClass.GetDescGroup());
}
正在测试的代码:
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();
}
}
Populate() 和 SourceClass() 中的代码相同
当调用一个函数来获取 ArrayList 时,它只是变成空的
你的方法 SourceClass 有一个 return 类型 void 这使它成为一个方法而不是构造函数。因此,当您使用 new SourceClass 创建对象时,它会调用默认的空构造函数
构造函数必须是:
public SourceClass () {
....
}
定义构造函数时,不要给它一个 return 值。
在你的代码中:
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);
}
这不是构造函数,只是 class 的一个方法,它与 class 同名并且 return 无效。
在这种情况下,根据 Java 的理解,您没有提供任何构造函数,java 提供了一个没有参数的默认构造函数。在测试代码中,将调用此默认构造函数,而不是您的 SourceClass
方法。
要修复它,只需从构造函数声明中删除 'void'。
构造函数中的代码未被调用。我必须调用一个附加函数来调用代码。
测试代码:
public static void main(String[] args){
SourceClass myClass = new SourceClass();
myClass.Populate();//If this line is removed it does not work
System.out.println(myClass.GetDescGroup());
}
正在测试的代码:
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();
}
}
Populate() 和 SourceClass() 中的代码相同
当调用一个函数来获取 ArrayList 时,它只是变成空的
你的方法 SourceClass 有一个 return 类型 void 这使它成为一个方法而不是构造函数。因此,当您使用 new SourceClass 创建对象时,它会调用默认的空构造函数
构造函数必须是:
public SourceClass () {
....
}
定义构造函数时,不要给它一个 return 值。
在你的代码中:
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);
}
这不是构造函数,只是 class 的一个方法,它与 class 同名并且 return 无效。
在这种情况下,根据 Java 的理解,您没有提供任何构造函数,java 提供了一个没有参数的默认构造函数。在测试代码中,将调用此默认构造函数,而不是您的 SourceClass
方法。
要修复它,只需从构造函数声明中删除 'void'。