Подтвердить что ты не робот

Почему у меня есть только один экземпляр объекта Calendar

Мне просто интересно...

Почему у меня есть только один экземпляр объекта Calendar. Есть ли причина, по которой он должен быть одиночным?

Я попытался прочитать документацию но они не упомянули, почему это необходимо. И быстрый поиск в Google не дал мне никаких ответов.

4b9b3361

Ответ 1

Календарь не является ничем, это абстрактный класс. Метод getInstance представляет собой метод Factory, который возвращает конкретную реализацию класса Calendar.

Найдите в Google исходный код java.util.Calendar, и вы увидите, как он работает.

Ответ 2

Считаете ли вы, что это синглтон, потому что он имеет метод getInstance()? Это не тот случай!

getInstance() каждый раз возвращает новый экземпляр.

Ответ 3

Он не является одиночным.

Это:

public static void main(String args[]) {
        Calendar c1, c2;
        c1 = Calendar.getInstance();
        c2 = Calendar.getInstance();
        c1.add(Calendar.MONTH, 1);
        System.out.println(c1);
        System.out.println(c2);
    }

Выходы:

java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Jerusalem",offset=7200000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Asia/Jerusalem,offset=7200000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=26,startDayOfWeek=6,startTime=7200000,startTimeMode=0,endMode=1,endMonth=8,endDay=13,endDayOfWeek=0,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=5,WEEK_OF_YEAR=21,WEEK_OF_MONTH=3,DAY_OF_MONTH=19,DAY_OF_YEAR=139,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=21,SECOND=27,MILLISECOND=839,ZONE_OFFSET=7200000,DST_OFFSET=3600000]
java.util.GregorianCalendar[time=1305789687839,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Jerusalem",offset=7200000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Asia/Jerusalem,offset=7200000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=26,startDayOfWeek=6,startTime=7200000,startTimeMode=0,endMode=1,endMonth=8,endDay=13,endDayOfWeek=0,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=4,WEEK_OF_YEAR=21,WEEK_OF_MONTH=3,DAY_OF_MONTH=19,DAY_OF_YEAR=139,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=21,SECOND=27,MILLISECOND=839,ZONE_OFFSET=7200000,DST_OFFSET=3600000]

(что отличается, как вы можете видеть)

BTW, быстрый поиск возвращает исходный код:

public static synchronized Calendar getInstance() {
       return new GregorianCalendar();
}

Ответ 4

У вас может быть столько экземпляров Calendar, сколько хотите... по модулю, что это абстрактный класс, поэтому вы говорите о примерах дочерних классов Calendar.

Возможно, вы думаете, что метод getInstance() возвращает объект singleton? Это не так. Он создает и возвращает новый объект каждый раз, когда вы его вызываете.

(В javadoc явно не указано, что календарь не является одиночным, но он говорит: "Возвращенный календарь основан на текущем времени...". Это означает, что он каждый раз возвращает новый объект. потому что текущее время продолжает меняться. И вообще, что делает этот метод, если вы хотите посмотреть исходный код.)