Инициализировать календарь в конструкторе - PullRequest
8 голосов
/ 22 декабря 2011

Если я сделаю это:

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 ]

19 голосов
/ 22 декабря 2011

Календарь - это абстрактный класс, поэтому вы не можете создать его экземпляр. Когда вы вызываете 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;
}
0 голосов
/ 22 декабря 2011

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;
}
0 голосов
/ 22 декабря 2011

создайте свой собственный класс с соответствующим конструктором и используйте в нем Java-класс Calendar, чтобы инициализировать свой собственный объект класса календаря

...