Spec-Zone.ru › OpenJDK 27

Класс ClassValue<T>

java.lang.Object
java.lang.ClassValue<T>
Параметры типа:
T - тип связанного значения
public abstract class ClassValue<T> extends Object
Лениво связывает вычисленное значение с любым объектом Class. Например, если динамическому языку необходимо построить таблицу диспетчеризации сообщений для каждого класса, встреченного в точке вызова отправки сообщения, он может использовать ClassValue для кэширования информации, необходимой для быстрой отправки сообщения для каждого встреченного класса.

Основная операция ClassValue — это get, которая возвращает связанное значение, изначально созданное вызовом computeValue; при гонке может произойти несколько вызовов, но с Class связывается и возвращается ровно одно значение.

Другая операция — remove: она очищает связанное значение (если оно существует) и гарантирует, что следующее связанное значение будет вычислено с учетом актуальных входных состояний после удаления.

Для конкретной связи существует полный порядок обращений к связанному значению. Обращения атомарны; к ним относятся:

  • Обращение только для чтения посредством get
  • Попытка связать возвращаемое значение computeValue посредством get
  • Очистка связи посредством remove
Вызов get всегда включает как минимум одно обращение; вызов remove всегда включает ровно одно обращение; вызов computeValue всегда происходит между двумя обращениями. Это устанавливает порядок вызовов computeValue относительно вызовов remove и определяет, могут ли результаты computeValue быть успешно связаны посредством get.
Начиная с:
1.7

Краткое описание конструкторов

ClassValue()
Модификатор Конструктор Описание
protected
Единственный конструктор.

Краткое описание методов

Модификатор и тип Метод Описание
protected abstract T computeValue(Class<?> type)
Вычисляет значение, связываемое с заданным Class.
T get(Class<?> type)
Возвращает значение, связанное с заданным Class.
void remove(Class<?> type)
Удаляет связанное значение для заданного Class и аннулирует все устаревшие вычисления.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли какой-либо другой объект этому объекту.
protected void finalize()
Устарел, будет удален: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ждать, пока он не будет разбужен, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ждать, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечет заданное время.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ждать, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечет заданное время.

Подробное описание конструкторов

ClassValue

protected ClassValue()
Единственный конструктор. (Вызывается конструкторами подклассов, обычно неявно.)

Подробное описание методов

computeValue

protected abstract T computeValue(Class<?> type)
Вычисляет значение, связываемое с заданным Class.

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

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

В противном случае значение вычисляется и возвращается. Предпринимается попытка связать возвращаемое значение; возможны следующие результаты:

  • Связанное значение присутствует; оно возвращается, и новая связь не создается.
  • Самый последний вызов remove, если он был, не происходит до завершения computeValue, вычислившего значение для связывания, в смысле happens-before (JLS §17.4.5). Новый вызов computeValue, перед которым происходит этот вызов remove в смысле happens-before, восстановит это отношение happens-before.
  • В противном случае это значение успешно связывается и возвращается.
Примечание API:
Вызов computeValue может из-за загрузки классов или иных обстоятельств рекурсивно вызвать get или remove для того же type. Рекурсивный вызов get, если рекурсия прекращается, успешно завершается, и инициирующий вызов get получает связанное значение, установленное в результате рекурсии. Рекурсивный вызов remove не выполняет никаких действий, поскольку он происходит в том же потоке, а вызов remove уже происходит до завершения этого вызова computeValue в смысле happens-before; результат этого вызова computeValue все еще может быть связан.
Параметры:
type — Class, с которым связывается значение
Возвращает:
новое вычисленное значение для связывания
См. также:
  • get(Class)
  • remove(Class)

get

public T get(Class<?> type)
Возвращает значение, связанное с заданным Class.

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

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

Параметры:
type — Class, для которого извлекается связанное значение
Возвращает:
значение, связанное с заданным Class
Выбрасывает:
NullPointerException — если аргумент равен null
См. также:
  • remove(Class)
  • computeValue(Class)

remove

public void remove(Class<?> type)
Удаляет связанное значение для заданного Class и аннулирует все устаревшие вычисления. Если впоследствии к этой связи обратятся, удаление произойдет до завершения вызова computeValue, вернувшего связанное значение, в смысле happens-before (JLS §17.4.5).
Параметры:
type — тип, значение класса которого необходимо удалить
Выбрасывает:
NullPointerException — если аргумент равен null

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, в том числе общие сведения, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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