it-roy-ru.com

Инициализировать календарь в конструкторе

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

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, как описано выше.

8
Favolas

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

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

0
Pratik