在构造函数中初始化日历

时间:2011-12-22 14:38:46

标签: java constructor calendar initialization

如果我这样做:

new Estimacao("Aarão","Affenpinscher","Abóbora",new GregorianCalendar(1999,7,26),0),

一切都按预期工作。 但如果我这样做:

new Estimacao("Aarão","Affenpinscher","Abóbora",new Calendar(1999,7,26),0),

可以做到。我所知道的。我们必须像这样初始化日历:

Calendar date = Calendar.getInstance();
date.set(Calendar.YEAR, 1999);
date.set(Calendar.MONTH, 7);
date.set(Calendar.DAY_OF_MONTH, 26);

我想知道的是,如上所述创建和初始化对象Calendar时,是否可以使用GregorianCalendar并实现与new Estimacao相同的效果。

3 个答案:

答案 0 :(得分:19)

Calendar是一个Abstract类,因此您无法创建它的实例。当你调用getInstance时,它实际上返回一个新的GregorianCalendar实例。所以它与你的第一个例子相同。

所以我想问题是,为什么要调用新的日历而不是新的GregorianCalendar?如果它只是为了你可以隐藏你正在使用的实现,那么我要么只是做你已经做的初始化日历。或者创建一个采用相同参数的方法,并隐藏对Calendar类的调用,例如

public Calendar getCalendar(int day, int month, int year) {
    Calendar date = Calendar.getInstance();
    date.set(Calendar.YEAR, year);

    // We will have to increment the month field by 1

    date.set(Calendar.MONTH, month+1);

    // As the month indexing starts with 0

    date.set(Calendar.DAY_OF_MONTH, day);

    return date;
}

答案 1 :(得分:0)

使用适当的构造函数创建自己的自定义类,并使用其中的Java Calendar类初始化您自己的日历类对象

答案 2 :(得分:-1)

Calendar没有公共构造函数,并提供Calendar.getInstance()方法作为构造类实例的方法。如果需要参数化Calendar对象的构造,为什么不在类上编写辅助方法呢?

new Estimacao("Aarão","Affenpinscher","Abóbora", this.getCalendar(1999,7,26),0);

/* ...elided...other code in here */

private Calendar getCalendar(int year, int month, int day) {
    Calendar c = Calendar.getInstance()
    c.set(Calendar.YEAR, year);
    c.set(Calendar.MONTH, month);
    c.set(Calendar.DAY_OF_MONTH, day);
    return c;
}