Класс SwitchBootstraps
public final class SwitchBootstraps extends Object
invokedynamic точек вызова, реализующих функциональность выбора оператора switch. Bootstrap-методы принимают дополнительные статические аргументы, соответствующие меткам case оператора switch, неявно пронумерованным последовательно, начиная с [0..N).- Начиная с:
- 21
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static CallSite |
enumSwitch |
Bootstrap-метод для связывания точки вызова invokedynamic, реализующей switch для цели типа enum. |
static CallSite |
typeSwitch |
Bootstrap-метод для связывания точки вызова invokedynamic, реализующей switch для цели ссылочного типа. |
Подробное описание методов
typeSwitch
public static CallSite typeSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
invokedynamic, реализующей switch для цели ссылочного типа. Статические аргументы представляют собой массив меток вариантов, которые должны быть ненулевыми и иметь тип String, Integer, Class или EnumDesc. Тип возвращаемого дескриптора метода CallSite будет иметь тип возвращаемого значения int. У него два параметра: первым аргументом будет экземпляр Object (target), а вторым — int (restart).
Если target равен null, метод точки вызова возвращает -1.
Если target не равен null, метод точки вызова возвращает индекс первого элемента в массиве labels, начиная с индекса restart, который соответствует одному из следующих условий:
- элемент имеет тип
Class, который может быть присвоен классу цели; или - элемент имеет тип
StringилиIntegerи равен цели. - элемент имеет тип
EnumDesc, описывающий константу, равную цели.
Если ни один элемент массива labels не соответствует цели, метод точки вызова возвращает длину массива labels.
Значение индекса restart должно находиться в диапазоне от 0 (включительно) до длины массива labels (включительно); в противном случае выбрасывается IndexOutOfBoundsException.
- Параметры:
-
lookup— представляет контекст поиска с привилегиями доступа вызывающего кода. При использовании сinvokedynamicвиртуальная машина автоматически помещает его в стек. -
invocationName— не используется -
invocationType— тип вызоваCallSiteс двумя параметрами: ссылочным типом,intиintв качестве типа возвращаемого значения. -
labels— метки вариантов: константыStringиInteger, а также экземплярыClassиEnumDescв любом сочетании - Возвращает:
CallSite, возвращающий первый совпавший элемент, как описано выше- Выбрасывает:
-
NullPointerException— если любой аргумент равенnull -
IllegalArgumentException— если любой элемент в массиве меток равен null -
IllegalArgumentException— если тип вызова не является типом метода, у которого первый параметр имеет ссылочный тип, второй параметр имеет типint, а тип возвращаемого значения —int, -
IllegalArgumentException— еслиlabelsсодержит элемент, тип которого не являетсяString,Integer,Long,Float,Double,Boolean,ClassилиEnumDesc. -
IllegalArgumentException— еслиlabelsсодержит элемент, тип которого не являетсяBoolean, когдаtargetявляетсяBoolean.class. - См. Спецификацию виртуальной машины 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 для цели типа enum. Статические аргументы используются для кодирования меток вариантов, связанных с конструкцией switch; каждую метку можно закодировать двумя способами: - как значение
String, представляющее имя константы enum, связанной с меткой - как значение
Class, представляющее тип enum, связанный с шаблоном проверки типа
Возвращаемый дескриптор метода CallSite будет иметь тип возвращаемого значения int и принимать два параметра: первым аргументом будет экземпляр Enum (target), а вторым — int (restart).
Если target равен null, метод точки вызова возвращает -1.
Если target не равен null, метод точки вызова возвращает индекс первого элемента в массиве labels, начиная с индекса restart, который соответствует одному из следующих условий:
- элемент имеет тип
Class, который может быть присвоен классу цели; или - элемент имеет тип
Stringи равенEnum.name()константы enum цели.
Если ни один элемент массива labels не соответствует цели, метод точки вызова возвращает длину массива labels.
Значение индекса restart должно находиться в диапазоне от 0 (включительно) до длины массива labels (включительно); в противном случае выбрасывается IndexOutOfBoundsException.
- Параметры:
-
lookup— представляет контекст поиска с привилегиями доступа вызывающего кода. При использовании сinvokedynamicвиртуальная машина автоматически помещает его в стек. -
invocationName— не используется -
invocationType— тип вызоваCallSiteс двумя параметрами: типом enum,intиintв качестве типа возвращаемого значения. -
labels— метки вариантов: константыStringи экземплярыClassв любом сочетании - Возвращает:
CallSite, возвращающий первый совпавший элемент, как описано выше- Выбрасывает:
-
NullPointerException— если любой аргумент равенnull -
IllegalArgumentException— если любой элемент в массиве меток равен null, если тип вызова не является типом метода, у которого тип первого параметра — тип enum, второй параметр имеет типint, а тип возвращаемого значения —int, либо еслиlabelsсодержит элемент, тип которого не являетсяStringилиClassцелевого типа enum. - См. Спецификацию виртуальной машины 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/runtime/SwitchBootstraps.html