如果我这样做:
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
相同的效果。
答案 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;
}