无法在构造函数中添加到ArrayLists

时间:2015-05-07 10:38:31

标签: java constructor

不会调用构造函数中的代码。我必须调用一个额外的函数来调用代码。

测试代码:

 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时,它只是变为空

2 个答案:

答案 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'。