如何使用空ArrayList创建构造函数?

时间:2014-03-08 16:17:36

标签: java arraylist constructor

我编写了一个可以传递所有字段的构造函数,包括一个Arraylist。如果我想要构造函数,我不会传递Arraylist而是给它一个空的Arraylist,我不知道该怎么办。

例如我已经写了一个课程课程,现在我正在写一个学生课程。学生班包含一个Arraylist。

class Student {
    String studentFirstName;
    String studentLastName;
    ArrayList<Course> studentSchedule = new ArrayList<Course>();

    // Constructors
    Student(String newFirstName,  String newLastName) {
        this.Student(newFirstName, newLastName, _______ ); //what to put in the blank?
    }

    Student(String newFirstName, String newLastName, ArrayList<Course> newSchedule) {
        this.studentFirstName = newFirstName;
        this.studentLastName = newLastName;
        this.studentSchedule = newSchedule;
    }
    .
    .
    .

我被困在这里。将null放在空白处不起作用,我得到编译器警告:方法Student(String,String,null)未定义类型Student显然我错过了这一点。

如何让构造函数给我一个空的Arraylist?

4 个答案:

答案 0 :(得分:2)

好吧,你想要传递一个空的ArrayList,所以传递一个空的ArrayList:

class Student {
    String studentFirstName;
    String studentLastName;
    List<Course> studentSchedule; // no initialization here: it's done in the constructor

    // Constructors
    Student(String newFirstName,  String newLastName) {
        this(newFirstName, newLastName, new ArrayList<Course>());
    }

    Student(String newFirstName, String newLastName, List<Course> newSchedule) {
        this.studentFirstName = newFirstName;
        this.studentLastName = newLastName;
        this.studentSchedule = newSchedule;
    }

请注意,您通常应该将字段声明为List<Course>,而不是ArrayList<Course>,除非列表是ArrayList非常重要,而不是任何其他类型的列表。接口程序。

此外,您的字段应该是私有的,不应该命名为studentXxx。他们是Student课程的一部分,所以这是多余的。 lastName已经足够,而且更加容易。

答案 1 :(得分:0)

传递空ArrayList

this(newFirstName, newLastName, new ArrayList<Course>());

(另请注意,正确的语法为this.,而非this.Student.

答案 2 :(得分:0)

如果我弄错了,可能会传递Arraylist的新空实例

this (newFirstName, newLastName, new ArrayList<Course>())

或者,您也可以传递null

this (newFirstName, newLastName, null)

修改:

在@Erwin的评论之后,要调用同一个类的构造函数,你应该只使用this()

答案 3 :(得分:0)

只需构造一个空ArrayList并将其传递给构造函数:

Student(String newFirstName,  String newLastName) {
    this(newFirstName, newLastName, new ArrayList<>());
}

另请注意,我已使用this()来调用Student的其他构造函数,而不是this.Student()无效。

但请注意,您已在声明点初始化ArrayList字段。如果您希望通过构造函数进行初始化,则应考虑删除此初始化。