Класс SwitchBootstraps
public final class SwitchBootstraps extends Object
invokedynamic, реализующих функциональность выбора оператора switch. Методы bootstrap принимают дополнительные статические аргументы, соответствующие меткам case оператора switch, неявно пронумерованным последовательно начиная с [0..N).- С версии:
- 21
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static CallSite |
enumSwitch |
Метод bootstrap для связывания точки вызова invokedynamic, реализующей switch для цели типа перечисления. |
static CallSite |
typeSwitch |
Метод bootstrap для связывания точки вызова invokedynamic, реализующей switch для целевого значения. |
Методы, объявленные в классе 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() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
Подробное описание методов
typeSwitch
public static CallSite typeSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
invokedynamic, реализующей switch для целевого значения. Статические аргументы labels представляют собой массив меток вариантов, которые должны быть ненулевыми и иметь тип String, Integer, Class или EnumDesc. Кроме того, при включенных предварительных функциях также разрешены метки Long, Float, Double и Boolean. Тип возвращаемого дескриптора метода CallSite будет иметь тип возвращаемого значения int. У него два параметра: первый аргумент будет значением типа (target), а второй — int (restart).
Если target имеет значение null, метод точки вызова возвращает -1.
Если target не имеет значение null, метод точки вызова возвращает индекс первого элемента в массиве labels, начиная с индекса restart, который соответствует одному из следующих условий:
- элемент имеет тип
Class, совместимый по присваиванию с классом цели - элемент имеет тип
Stringиequalsдля цели - элемент имеет тип
Integerи==для цели после распаковки, если она необходима - (Предварительная функция) элемент имеет тип
LongилиBooleanи==для цели после распаковки, если она необходима - (Предварительная функция) элемент имеет тип
FloatилиDoubleиequalsдля цели после упаковки, если она необходима - элемент имеет тип
EnumDesc, описывающий константу перечисления, которая==для цели
Если ни один элемент массива labels не соответствует цели, метод точки вызова возвращает длину массива labels.
Значение индекса restart должно находиться в диапазоне от 0 (включительно) до длины массива labels (включительно), иначе будет выброшено исключение IndexOutOfBoundsException.
- Параметры:
-
lookup— контекст поиска с полными привилегиями вызывающего кода -
invocationName— не используется; допускаетсяnull -
invocationType— тип вызоваCallSiteс двумя параметрами: целевым типом,intиintв качестве типа возвращаемого значения. -
labels— метки вариантов, описанные выше - Возвращает:
CallSite, возвращающий первый соответствующий элемент, как описано выше- Исключения:
-
IllegalArgumentException— если какой-либо элемент массива меток имеет значение null -
IllegalArgumentException— если тип вызова не является типом метода, у которого первый параметр имеет целевой тип, второй параметр имеет типint, а тип возвращаемого значения —int -
IllegalArgumentException— еслиlabelsсодержит элемент, тип которого неString,Integer,Long,Float,Double,Boolean,ClassилиEnumDesc -
IllegalArgumentException— если предварительные функции отключены иlabelsсодержит элемент типаLong,Float,DoubleилиBoolean - См. Спецификацию виртуальной машины Java:
- 4.4.6 Структура CONSTANT_NameAndType_info
4.4.10 Структуры CONSTANT_Dynamic_info и CONSTANT_InvokeDynamic_info
enumSwitch
public static CallSite enumSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
invokedynamic, реализующей switch для цели типа перечисления. Статические аргументы используются для кодирования меток вариантов, связанных с конструкцией switch, причем каждую метку можно закодировать двумя способами: - как значение
String, представляющее имя константы перечисления, связанной с меткой - как значение
Class, представляющее тип перечисления, связанный с шаблоном проверки типа
Возвращаемый дескриптор метода CallSite будет иметь тип возвращаемого значения int и принимать два параметра: первый аргумент будет экземпляром Enum (target), а второй — int (restart).
Если target имеет значение null, метод точки вызова возвращает -1.
Если target не имеет значение null, метод точки вызова возвращает индекс первого элемента в массиве labels, начиная с индекса restart, который соответствует одному из следующих условий:
- элемент имеет тип
Class, совместимый по присваиванию с классом цели; или - элемент имеет тип
Stringи равенEnum.name()целевой константы перечисления.
Если для заданного target в labels нет элемента, удовлетворяющего одному из перечисленных выше условий, метод точки вызова возвращает длину массива labels.
Значение индекса restart должно находиться в диапазоне от 0 (включительно) до длины массива labels (включительно), иначе будет выброшено исключение IndexOutOfBoundsException.
- Примечание к API:
- Массив
labelsможет содержать значенияString, не представляющие константы перечисления во время выполнения. - Параметры:
-
lookup— контекст поиска с полными привилегиями вызывающего кода -
invocationName— не используется; допускаетсяnull -
invocationType— тип вызоваCallSiteс двумя параметрами: типом перечисления,intиintв качестве типа возвращаемого значения. -
labels— метки вариантов: константыStringи экземплярыClassв любом сочетании - Возвращает:
CallSite, возвращающий первый соответствующий элемент, как описано выше- Исключения:
-
IllegalArgumentException— если какой-либо элемент массива меток имеет значение null -
IllegalArgumentException— если какой-либо элемент массива меток является пустымString -
IllegalArgumentException— если тип вызова не является типом метода, у которого тип первого параметра является типом перечисления, второй параметр имеет типint, а тип возвращаемого значения —int -
IllegalArgumentException— еслиlabelsсодержит элемент, который не имеет типStringилиClass, равный целевому типу перечисления - См. Спецификацию виртуальной машины Java:
- 4.4.6 Структура CONSTANT_NameAndType_info
4.4.10 Структуры CONSTANT_Dynamic_info и CONSTANT_InvokeDynamic_info
© 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.