无法在构造函数中添加到 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'。