Класс 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 для целевого объекта ссылочного типа. Статические аргументы представляют массив меток case, которые должны быть не нулевыми и иметь тип 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- метки case -StringиIntegerконстанты иClassиEnumDescэкземпляры в любом сочетании - Возвращает:
- обработчик метода
CallSite, возвращающий первый совпавший элемент, как описано выше - Исключение:
-
NullPointerException- если какой-либо аргументnull -
IllegalArgumentException- если какой-либо элемент в массиве меток null, если тип вызова не является типом метода, первый параметр которого - ссылочный тип, второй параметр типаintи с возвращаемым типомint, или еслиlabelsсодержит элемент, который не является типомString,Integer,ClassилиEnumDesc. - См. Спецификацию виртуальной машины 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 для целевого объекта типа перечисления. Статические аргументы используются для кодирования меток case, связанных с конструкцией 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- метки case -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, 2023, 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/21/docs/api/java.base/java/lang/runtime/SwitchBootstraps.html