Spec-Zone.ru › OpenJDK 27

Класс 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 для цели типа перечисления.
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
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли какой-либо другой объект этому объекту.
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(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени.

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

typeSwitch

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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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