Какая реализация `Clock` используется по умолчанию в java .time? - PullRequest
4 голосов
/ 21 июня 2020

Фреймворк java .time , встроенный в Java 8 и более поздние версии, включает класс Clock. Этот класс предоставляет несколько вариантов, полезных для тестирования нашего кода обработки даты и времени.

Instant.now( Clock.fixed​( myInstant , myZoneId ) )

Какой экземпляр Clock представляет собой значение по умолчанию, используемое неявно в java .time вызовах, где мы это делаем не указывать Clock?

Instant.now()

Я предполагаю, что значение по умолчанию:

… но в документации не указано, что именно.

При модульном тестировании иногда нам нужны часы с измененным поведением. Но когда мы хотим явно передать объект Clock, который дает поведение по умолчанию, что мы используем?

1 Ответ

6 голосов
/ 21 июня 2020

Исходный код Instant.now() 1 , который вы можете легко найти, если используете IDE 2 :

public static Instant now() {
    return Clock.systemUTC().instant();
}

1) Скопировано из OpenJDK 14 2) Например, в Eclipse вы помещаете курсор на now() и нажимаете F3, чтобы увидеть исходный код.

Гарантируется, что все совместимые версии Java будет делать это таким образом, поскольку это часть контракта, определенного для метода, то есть так задокументировано в javado c of now():

Это запросит UT системы C часы , чтобы получить текущий момент.

Эта ссылка ведет к Clock.systemUTC().

...