Spec-Zone.ru › OpenJDK 25

Класс SwitchBootstraps

java.lang.Object
java.lang.runtime.SwitchBootstraps
public final class SwitchBootstraps extends Object
Bootstrap-методы для связывания invokedynamic точек вызова, реализующих функциональность выбора оператора switch. Bootstrap-методы принимают дополнительные статические аргументы, соответствующие меткам case оператора switch, неявно пронумерованным последовательно, начиная с [0..N).
Начиная с:
21

Краткое описание методов

Модификатор и тип Метод Описание
static CallSite enumSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
Bootstrap-метод для связывания точки вызова invokedynamic, реализующей switch для цели типа enum.
static CallSite typeSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
Bootstrap-метод для связывания точки вызова invokedynamic, реализующей switch для цели ссылочного типа.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание методов

typeSwitch

public static CallSite typeSwitch(MethodHandles.Lookup lookup, String invocationName, MethodType invocationType, Object... labels)
Bootstrap-метод для связывания точки вызова 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)
Bootstrap-метод для связывания точки вызова 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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API