Класс 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
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Единственный конструктор. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected abstract T |
computeValue |
Вычисляет значение, связываемое с заданным Class. |
T |
get |
Возвращает значение, связанное с заданным Class. |
void |
remove |
Удаляет связанное значение для заданного Class и аннулирует все устаревшие вычисления. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли какой-либо другой объект этому объекту. |
protected void |
finalize() |
Устарел, будет удален: этот элемент API подлежит удалению в будущей версии. Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ждать, пока он не будет разбужен, обычно посредством уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ждать, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечет заданное время. |
final void |
wait |
Заставляет текущий поток ждать, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечет заданное время. |
Подробное описание конструкторов
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
public T get(Class<?> type)
Class. Сначала этот метод выполняет обращение только для чтения и возвращает связанное значение, если оно существует. В противном случае метод пытается связать значение посредством вызова computeValue, пока связанное значение не появится; его может связать конкурирующий поток.
Этот метод может выбросить исключение, возникшее при вызове computeValue. В этом случае связь не создается.
- Параметры:
-
type—Class, для которого извлекается связанное значение - Возвращает:
- значение, связанное с заданным
Class - Выбрасывает:
-
NullPointerException— если аргумент равенnull - См. также:
remove
public void remove(Class<?> type)
Class и аннулирует все устаревшие вычисления. Если впоследствии к этой связи обратятся, удаление произойдет до завершения вызова computeValue, вернувшего связанное значение, в смысле happens-before (JLS §17.4.5).- Параметры:
-
type— тип, значение класса которого необходимо удалить - Выбрасывает:
-
NullPointerException— если аргумент равенnull
© 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.