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