Почему YearMonth является временным, а MonthDay не является временным? - PullRequest
3 голосов
/ 05 июня 2019

Почему YearMonth класс Temporal (интерфейс), а MonthDay не Temporal?

Это кажется странным, потому что оба класса почти идентичны по своему значению.

Я могу предположить, что MonthDay никогда не используется там, где используется интерфейс Temporal, но, возможно, есть более веская причина.

1 Ответ

9 голосов
/ 05 июня 2019

Это вопрос чтения документации MonthDay, спасибо davidxxx и другим за нахождение правильной цитаты:

Этот класс реализует TemporalAccessor вместо Temporal.Это связано с тем, что невозможно определить, является ли 29 февраля действительным или нет без внешней информации, что препятствует реализации плюса / минуса.В связи с этим MonthDay предоставляет доступ только к запросу и задает поля MONTH_OF_YEAR и DAY_OF_MONTH.

. Вы можете прочитать это вместе с этим фрагментом из документации Temporal:

Это базовый тип интерфейса для объектов даты, времени и смещения, которые достаточно полны, чтобы ими можно было управлять, используя плюсы и минусы.

Они не хотели определять плюси минус для MonthDay.Потому что, например, не ясно, что такое 28 февраля плюс 1 день.В некоторые годы это 29 февраля, в другие - 1 марта.

Для сравнения, добавление месяца или года к YearMonth всегда дает четко определенный и неудивительный результат.

Ссылки

...