在构造函数中初始化日历

Fav*_*las 8 java constructor calendar initialization

如果我这样做:

new Estimacao("Aarão","Affenpinscher","Abóbora",new GregorianCalendar(1999,7,26),0),
Run Code Online (Sandbox Code Playgroud)

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

new Estimacao("Aarão","Affenpinscher","Abóbora",new Calendar(1999,7,26),0),
Run Code Online (Sandbox Code Playgroud)

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

Calendar date = Calendar.getInstance();
date.set(Calendar.YEAR, 1999);
date.set(Calendar.MONTH, 7);
date.set(Calendar.DAY_OF_MONTH, 26);
Run Code Online (Sandbox Code Playgroud)

我想知道的是,如上所述创建和初始化对象时是否可以使用Calendar并实现相同的功能.GregorianCalendarnew Estimacao

Dav*_*ton 20

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;
}
Run Code Online (Sandbox Code Playgroud)

  • http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html查看API,我想你会发现它是抽象的 (2认同)
  • 好的,我立刻纠正了.看起来我们想出了相同的解决方案. (2认同)