Spec-Zone.ru › OpenJDK 8

Интерфейс TemporalAccessor

Все известные подинтерфейсы:
ChronoLocalDate, ChronoLocalDateTime<D>, ChronoZonedDateTime<D>, Era, Temporal
Все известные реализующие классы:
DayOfWeek, HijrahDate, HijrahEra, Instant, IsoEra, JapaneseDate, JapaneseEra, LocalDate, LocalDateTime, LocalTime, MinguoDate, MinguoEra, Month, MonthDay, OffsetDateTime, OffsetTime, ThaiBuddhistDate, ThaiBuddhistEra, Year, YearMonth, ZonedDateTime, ZoneOffset

public interface TemporalAccessor

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

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

Большинство данных о дате и времени могут быть представлены в виде числа. Эти данные моделируются с помощью TemporalField с хранением числа с помощью long для обработки больших значений. Год, месяц и день месяца — простые примеры полей, но они также включают мгновение и смещения. См. ChronoField для стандартного набора полей.

Два элемента информации о дате/времени не могут быть представлены числами: хронология и часовой пояс. К ним можно получить доступ через запросы с использованием статических методов, определенных в TemporalQuery.

Подинтерфейс Temporal расширяет это определение, добавив поддержку корректировки и изменения более полных временных объектов.

Этот интерфейс является интерфейсом на уровне фреймворка, который не следует широко использовать в прикладном коде. Вместо этого приложения должны создавать и передавать экземпляры конкретных типов, таких как LocalDate. Это вызвано, среди прочего, тем, что реализации этого интерфейса могут быть в календарных системах, отличных от ISO. См. ChronoLocalDate для более подробного обсуждения проблем.

Требования к реализации:
Данный интерфейс не накладывает ограничений на изменчивость реализаций, однако неизменяемость настоятельно рекомендуется.
С:
1.8

Методы

Модификатор и тип Метод и описание
default int get(TemporalField field)

Возвращает значение указанного поля в качестве int.

long getLong(TemporalField field)

Возвращает значение указанного поля как long.

boolean isSupported(TemporalField field)

Проверяет, поддерживается ли указанное поле.

default <R> R query(TemporalQuery<R> query)

Опрашивает эту дату-время.

default ValueRange range(TemporalField field)

Возвращает диапазон допустимых значений для указанного поля.

Методы

isSupported

boolean isSupported(TemporalField field)

Проверяет, поддерживается ли указанное поле.

Проверяет, можно ли получить значение указанного поля из даты-времени. Если false, вызов методов range и get вызовет исключение.

Требования к реализации:
Реализации должны проверять и обрабатывать все поля, определённые в ChronoField. Если поле поддерживается, то должно быть возвращено true, в противном случае — false.

Если поле не является ChronoField, результат этого метода получается путем вызова TemporalField.isSupportedBy(TemporalAccessor), передав this в качестве аргумента.

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

Параметры:
field — поле для проверки, null возвращает false
Возвращает:
true, если эту дату-время можно запросить для поля, false — если нет

range

default ValueRange range(TemporalField field)

Получает диапазон допустимых значений для указанного поля.

Все поля могут быть выражены как целое число long. Этот метод возвращает объект, описывающий допустимый диапазон для этого значения. Значение этого временного объекта используется для повышения точности возвращаемого диапазона. Если дата-время не может вернуть диапазон, потому что поле не поддерживается или по какой-либо другой причине, будет выброшено исключение.

Обратите внимание, что результат описывает только минимальное и максимальное допустимые значения, и не стоит слишком много о них думать. Например, могут существовать значения в диапазоне, которые не являются допустимыми для поля.

Требования к реализации:
Реализации должны проверять и обрабатывать все поля, определённые в ChronoField. Если поле поддерживается, то должен быть возвращён диапазон поля. Если не поддерживается, то должно быть выброшено UnsupportedTemporalTypeException.

Если поле не является ChronoField, результат этого метода получается путем вызова TemporalField.rangeRefinedBy(TemporalAccessorl), передав this в качестве аргумента.

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

Реализация по умолчанию должна вести себя эквивалентно следующему коду:

if (field instanceof ChronoField) {
    if (isSupported(field)) {
      return field.range();
    }
    throw new UnsupportedTemporalTypeException("Unsupported field: " + field);
  }
  return field.rangeRefinedBy(this);
Параметры:
field — поле, для которого нужно запросить диапазон, не null
Возвращает:
диапазон допустимых значений для поля, не null
Исключения:
DateTimeException — если диапазон для поля получить невозможно
UnsupportedTemporalTypeException — если поле не поддерживается

get

default int get(TemporalField field)

Получает значение указанного поля в виде int.

Запрашивает значение указанного поля у даты-времени. Возвращаемое значение всегда будет находиться в пределах допустимого диапазона значений для поля. Если дата-время не может вернуть значение, потому что поле не поддерживается или по какой-либо другой причине, будет выброшено исключение.

Требования к реализации:
Реализации должны проверять и обрабатывать все поля, определённые в ChronoField. Если поле поддерживается и имеет int диапазон, то должно быть возвращено значение поля. Если не поддерживается, то должно быть выброшено UnsupportedTemporalTypeException.

Если поле не является ChronoField, результат этого метода получается путем вызова TemporalField.getFrom(TemporalAccessor), передав this в качестве аргумента.

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

Реализация по умолчанию должна вести себя эквивалентно следующему коду:

if (range(field).isIntValue()) {
    return range(field).checkValidIntValue(getLong(field), field);
  }
  throw new UnsupportedTemporalTypeException("Invalid field " + field + " + for get() method, use getLong() instead");
Параметры:
field — поле для получения, не null
Возвращает:
значение поля, в пределах допустимого диапазона значений
Исключения:
DateTimeException — если значение для поля получить невозможно или значение находится вне допустимого диапазона для поля
UnsupportedTemporalTypeException — если поле не поддерживается или диапазон значений выходит за пределы int
ArithmeticException — если произошел переполнение целочисленной переменной

getLong

long getLong(TemporalField field)

Получает значение указанного поля как long.

Запрашивает значение указанного поля у даты-времени. Возвращаемое значение может находиться вне допустимого диапазона значений для поля. Если дата-время не может вернуть значение, потому что поле не поддерживается или по какой-либо другой причине, будет выброшено исключение.

Требования к реализации:
Реализации должны проверять и обрабатывать все поля, определённые в ChronoField. Если поле поддерживается, то должно быть возвращено значение поля. Если не поддерживается, то должно быть выброшено UnsupportedTemporalTypeException.

Если поле не является ChronoField, результат этого метода получается путем вызова TemporalField.getFrom(TemporalAccessor), передав this в качестве аргумента.

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

Параметры:
field — поле для получения, не null
Возвращает:
значение поля
Исключения:
DateTimeException — если значение для поля получить невозможно
UnsupportedTemporalTypeException — если поле не поддерживается
ArithmeticException — если произошел переполнение целочисленной переменной

query

default <R> R query(TemporalQuery<R> query)

Запрашивает эту дату-время.

Запрашивает эту дату-время с помощью указанного объекта стратегии запроса.

Запросы — ключевой инструмент для извлечения информации из дат-времени. Они предназначены для внешнего использования процесса запроса, позволяя различные подходы, в соответствии со стратегическим шаблоном проектирования. Примеры могут включать запрос, проверяющий, является ли дата днем перед 29 февраля в високосном году, или вычисление числа дней до следующего дня рождения.

Наиболее распространённые реализации запросов — ссылки на методы, такие как LocalDate::from и ZoneId::from. Дополнительные реализации предоставляются как статические методы в TemporalQuery.

Требования к реализации:
Реализация по умолчанию должна вести себя эквивалентно следующему коду:
if (query == TemporalQueries.zoneId() ||
        query == TemporalQueries.chronology() || query == TemporalQueries.precision()) {
    return null;
  }
  return query.queryFrom(this);
Будущие версии могут добавить дополнительные запросы в оператор if.

Все классы, реализующие этот интерфейс и переопределяющие этот метод, должны вызывать TemporalAccessor.super.query(query). Классы JDK могут избегать вызова super, если они предоставляют поведение, эквивалентное поведению по умолчанию, но классы, не являющиеся классами JDK, не могут использовать эту оптимизацию и должны вызывать super.

Если реализация может предоставить значение для одного из запросов, перечисленных в операторе if реализации по умолчанию, она должна это сделать. Например, приложение-определённый класс HourMin, хранящий час и минуты, должен переопределить этот метод следующим образом:

if (query == TemporalQueries.precision()) {
    return MINUTES;
  }
  return TemporalAccessor.super.query(query);

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

Параметры типа:
R — тип результата
Параметры:
query — запрос для вызова, не null
Возвращает:
результат запроса, может быть null (определяется запросом)
Исключения:
DateTimeException — если запрос выполнить невозможно
ArithmeticException — если произошел переполнение целочисленной переменной

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API