Spec-Zone.ru › OpenJDK 24

Класс StringConcatFactory

java.lang.Object
java.lang.invoke.StringConcatFactory
public final class StringConcatFactory extends Object

Методы для облегчения создания методов конкатенации строк, которые могут быть использованы для эффективной конкатенации известного числа аргументов известных типов, возможно после адаптации типов и частичной оценки аргументов. Эти методы обычно используются в качестве bootstrap-методов для invokedynamic мест вызова, чтобы поддерживать функцию конкатенации строк языка программирования Java.

Непосредственный доступ к поведению, определённому предоставленным MethodHandle, происходит в порядке через две фазы:

  1. Связывание происходит при вызове методов в этом классе. Они принимают в качестве аргументов тип метода, описывающий количество и типы конкатенируемых аргументов, и необязательно шаблон строки, а также константы, участвующие в конкатенации строк. Подробности о допустимых форматах шаблона описаны ниже. Связывание может включать динамическую загрузку нового класса, реализующего ожидаемое поведение конкатенации. CallSite содержит MethodHandle, указывающий на точный метод конкатенации. Методы конкатенации могут быть общими для разных CallSite, например, если методы связывания создают их как чистые функции.
  2. Вызов происходит, когда сгенерированный метод конкатенации вызывается с точными динамическими аргументами. Это может происходить много раз для одного метода конкатенации. Метод, на который ссылается поведение MethodHandle, вызывается со статическими аргументами и любыми дополнительными динамическими аргументами, предоставленными при вызове, как если бы это делалось через MethodHandle.invoke(Object...).

Этот класс предоставляет два вида методов связывания: простую версию (makeConcat(java.lang.invoke.MethodHandles.Lookup, String, MethodType)) с использованием только динамических аргументов и расширенную версию (makeConcatWithConstants(java.lang.invoke.MethodHandles.Lookup, String, MethodType, String, Object...)) с использованием расширенных форм захвата константных аргументов. Расширенная стратегия может создавать незначительно лучший байт-код вызова, ценой взрыва количества форм методов конкатенации строк, присутствующих во время выполнения, поскольку эти формы будут включать статические аргументы-константы.

Примечание API:

Существует ограничение JVM (ограничение структуры файла класса): ни один метод не может вызывать с более чем 255 слотами. Это ограничивает количество статических и динамических аргументов, которые можно передать методу загрузки. Поскольку существуют потенциальные стратегии конкатенации, использующие MethodHandle комбинаторы, нам нужно зарезервировать несколько пустых слотов в списках параметров для захвата временных результатов. Вот почему методы загрузки в этом фабричном классе не принимают более 200 слотов аргументов. Пользователям, которым требуется более 200 слотов аргументов в конкатенации, следует разделить большую конкатенацию на более мелкие выражения.

С момента:
9

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

Модификатор и тип Метод Описание
static CallSite makeConcat(MethodHandles.Lookup lookup, String name, MethodType concatType)
Обеспечивает создание оптимизированных методов конкатенации строк, которые могут использоваться для эффективной конкатенации известного числа аргументов известных типов, возможно после адаптации типов и частичной оценки аргументов.
static CallSite makeConcatWithConstants(MethodHandles.Lookup lookup, String name, MethodType concatType, String recipe, Object... constants)
Обеспечивает создание оптимизированных методов конкатенации строк, которые могут использоваться для эффективной конкатенации известного числа аргументов известных типов, возможно после адаптации типов и частичной оценки аргументов.

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

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

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

makeConcat

public static CallSite makeConcat(MethodHandles.Lookup lookup, String name, MethodType concatType) throws StringConcatException
Обеспечивает создание оптимизированных методов конкатенации строк, которые могут быть использованы для эффективной конкатенации известного числа аргументов известных типов, возможно после адаптации типов и частичной оценки аргументов. Обычно используется в качестве метода-загрузчика для invokedynamic мест вызова, чтобы поддерживать функцию конкатенации строк языка программирования Java.

Когда целевой метод, возвращаемый этим методом, вызывается, он возвращает результат конкатенации строк, принимая все аргументы функции, переданные методу связи, в качестве входных данных для конкатенации. Подпись целевого метода задана concatType. Для целевого метода, принимающего:

  • ноль входных данных, конкатенация приводит к пустой строке;
  • один входной параметр, конкатенация приводит к единственному вводу, преобразованному в соответствии с JLS 5.1.11 "Преобразование в строку"; в противном случае
  • два или более входных данных, входные данные конкатенируются в соответствии с требованиями, изложенными в JLS 15.18.1 "Оператор конкатенации строк +". Входные данные преобразуются в соответствии с JLS 5.1.11 "Преобразование в строку" и объединяются слева направо.

Предположим, что аргументы связи таковы:

  • concatType, описывающий подпись CallSite

Тогда должны выполняться следующие инварианты связи:

  • Количество слотов параметров в concatType меньше или равно 200
  • Тип возвращаемого значения в concatType совместим с String
Параметры:
lookup - Представляет контекст поиска с привилегиями доступа вызывающей стороны. В частности, контекст поиска должен иметь полный доступ к привилегиям. При использовании с invokedynamic, это автоматически добавляется в стек виртуальной машиной.
name - Имя метода для реализации. Это имя произвольное и не имеет смысла для этого метода связи. При использовании с invokedynamic, это предоставляется NameAndType структуры InvokeDynamic и автоматически добавляется в стек виртуальной машиной.
concatType - Ожидаемая подпись CallSite. Типы параметров представляют типы аргументов конкатенации; тип возвращаемого значения всегда совместим с String. При использовании с invokedynamic, это предоставляется NameAndType структуры InvokeDynamic и автоматически добавляется в стек виртуальной машиной.
Возвращаемое значение:
CallSite, целевой объект которого может использоваться для выполнения конкатенации строк с динамическими аргументами конкатенации, описанными заданным concatType.
Исключения:
StringConcatException - Если нарушен любой из инвариантов связи, описанных здесь, или контекст поиска не имеет привилегий частного доступа.
NullPointerException - Если любой из входных аргументов равен null. Это никогда не произойдет при вызове метода-загрузчика с помощью invokedynamic.
См. Спецификацию языка Java:
5.1.11 Преобразование в строку
15.18.1 Оператор конкатенации строк +

makeConcatWithConstants

public static CallSite makeConcatWithConstants(MethodHandles.Lookup lookup, String name, MethodType concatType, String recipe, Object... constants) throws StringConcatException
Обеспечивает создание оптимизированных методов конкатенации строк, которые могут быть использованы для эффективной конкатенации известного числа аргументов известных типов, возможно после адаптации типов и частичной оценки аргументов. Обычно используется в качестве метода-загрузчика для invokedynamic мест вызова, чтобы поддерживать функцию конкатенации строк языка программирования Java.

Когда целевой метод, возвращаемый этим методом, вызывается, он возвращает результат конкатенации строк, принимая все аргументы функции и константы, переданные методу связи, в качестве входных данных для конкатенации. Подпись целевого метода задана concatType и не включает константы. Для целевого метода, принимающего:

  • ноль входных данных, конкатенация приводит к пустой строке;
  • один входной параметр, конкатенация приводит к единственному вводу, преобразованному в соответствии с JLS 5.1.11 "Преобразование в строку"; в противном случае
  • два или более входных данных, входные данные конкатенируются в соответствии с требованиями, изложенными в JLS 15.18.1 "Оператор конкатенации строк +". Входные данные преобразуются в соответствии с JLS 5.1.11 "Преобразование в строку" и объединяются слева направо.

Рецепт конкатенации — это строковое описание способа построения конкатенированной строки из аргументов и констант. Рецепт обрабатывается слева направо, и каждый символ представляет вход для конкатенации. Символы рецепта означают:

  • \1 (Unicode 0001): обычный аргумент. Этот ввод передаётся динамическим аргументом и предоставляется при вызове метода конкатенации. Этот ввод может быть null.
  • \2 (Unicode 0002): константа. Этот ввод передаётся статическим аргументом загрузки. Эта константа может быть любым значением, представимым в пуле констант. При необходимости фабрика вызовет toString для выполнения однократного преобразования в строку.
  • Любое другое значение символа: одиночная константа символа.

Предположим, что аргументы связи таковы:

  • concatType, описывающий подпись CallSite
  • recipe, описывающий строковый рецепт
  • constants, массив аргументов констант

Тогда должны выполняться следующие инварианты связи:

  • Количество слотов параметров в concatType меньше или равно 200
  • Количество параметров в concatType равно количеству тегов \1 в recipe
  • Тип возвращаемого значения в concatType совместим с String, и соответствует типу возвращаемого значения возвращаемого MethodHandle
  • Количество элементов в constants равно количеству тегов \2 в recipe
Примечание API:
Генераторы кода имеют три различных способа обработки операнда строковой константы S в выражении конкатенации строк. Во-первых, S может быть материализован как ссылка (с помощью ldc) и передан как обычный аргумент (рецепт '\1'). Или S может быть сохранён в пуле констант и передан как константа (рецепт '\2'). Наконец, если S не содержит ни одного из символов тега рецепта ('\1', '\2'), то S может быть интерполирован в сам рецепт, что заставит его символы быть вставлены в результат.
Параметры:
lookup - Представляет контекст поиска с привилегиями доступа вызывающей стороны. В частности, контекст поиска должен иметь полный доступ к привилегиям. При использовании с invokedynamic, это автоматически добавляется в стек виртуальной машиной.
name - Имя метода для реализации. Это имя произвольное и не имеет смысла для этого метода связи. При использовании с invokedynamic, это предоставляется NameAndType структуры InvokeDynamic и автоматически добавляется в стек виртуальной машиной.
concatType - Ожидаемая подпись CallSite. Типы параметров представляют типы динамических аргументов конкатенации; тип возвращаемого значения всегда совместим с String. При использовании с invokedynamic, это предоставляется NameAndType структуры InvokeDynamic и автоматически добавляется в стек виртуальной машиной.
recipe - Рецепт конкатенации, описанный выше.
constants - Аргумент vararg, представляющий константы, переданные методу связи.
Возвращаемое значение:
CallSite, целевой объект которого может использоваться для выполнения конкатенации строк с динамическими аргументами конкатенации, описанными заданным concatType.
Исключения:
StringConcatException - Если нарушен любой из инвариантов связи, описанных здесь, или контекст поиска не имеет привилегий частного доступа.
NullPointerException - Если любой из входных аргументов равен null, или любая константа в recipe равна null. Это никогда не произойдёт при вызове метода-загрузчика с помощью invokedynamic.
См. Спецификацию языка Java:
5.1.11 Преобразование в строку
15.18.1 Оператор конкатенации строк +

© 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/invoke/StringConcatFactory.html

Spec-Zone.ru

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