Spec-Zone.ru › OpenJDK 17

Класс SwitchBootstraps

java.lang.Object
java.lang.runtime.SwitchBootstraps
public class SwitchBootstraps extends Object
SwitchBootstraps является предварительным API платформы Java.
Программы могут использовать SwitchBootstraps только при включенных предварительных функциях.
Предварительные функции могут быть удалены в будущих выпусках или обновлены до постоянных функций платформы Java.
Методы-загрузчики для связывания invokedynamic мест вызова, которые реализуют функциональность выбора оператора switch. Загрузчики принимают дополнительные статические аргументы, соответствующие case меткам switch, неявным образом пронумерованные последовательно, начиная с [0..N).
Since:
17

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

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

Методы, унаследованные от класса java.lang.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)
Метод-загрузчик для связывания места вызова invokedynamic , реализующего switch над целевым объектом ссылочного типа. Статические аргументы представляют собой массив меток случаев, которые не должны быть null и иметь тип String или Integer или Class.

Тип возвращаемого CallSite метода-обработчика будет иметь тип возвращаемого значения int. Он имеет два параметра: первый параметр будет экземпляром Object (target), а второй - int (restart).

Если target равен null, метод места вызова возвращает -1.

Если target не равен null, метод места вызова возвращает индекс первого элемента в массиве labels начиная с индекса restart, удовлетворяющего одному из следующих условий:

  • элемент имеет тип Class , присваиваемый классу целевого объекта;
  • элемент имеет тип String или Integer и равен целевому объекту.

Если ни один элемент в массиве labels не соответствует целевому объекту, метод места вызова возвращает длину массива labels.

Параметры:
lookup - Представляет контекст поиска с правами доступа вызывающего кода. При использовании с invokedynamic, это автоматически помещается в стек виртуальной машиной.
invocationName - не используется
invocationType - Тип вызова CallSite с двумя параметрами: ссылочный тип, int, и int в качестве типа возвращаемого значения.
labels - метки случаев - String и Integer константы и Class экземпляры, в любой комбинации
Возвращает:
CallSite возвращает первый соответствующий элемент, как описано выше
Исключение:
NullPointerException - если какой-либо аргумент равен null
IllegalArgumentException - если какой-либо элемент в массиве меток равен null, если тип вызова не является типом метода с первым параметром ссылочного типа, вторым параметром типа int и с типом возвращаемого значения int, или если labels содержит элемент, который не является типом String, Integer или 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.

Параметры:
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, 2021, 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/17/docs/api/java.base/java/lang/runtime/SwitchBootstraps.html

Spec-Zone.ru

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