Spec-Zone.ru › OpenJDK 27

Класс StringConcatFactory

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

Методы для упрощения создания методов конкатенации строк, которые можно использовать для эффективной конкатенации известного числа аргументов известных типов, возможно, после адаптации типов и частичного вычисления аргументов. Эти методы обычно используются как методы начальной загрузки для точек вызова 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)
Упрощает создание оптимизированных методов конкатенации строк, которые можно использовать для эффективной конкатенации известного числа аргументов известных типов, возможно, после адаптации типов и частичного вычисления аргументов.

Методы, объявленные в классе 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()
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо истечения заданного времени.

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

makeConcat

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

При вызове цели CallSite, возвращенного этим методом, возвращается результат конкатенации строк; все аргументы функции, переданные методу связывания, используются в качестве входных данных для конкатенации. Сигнатура цели задается 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.

При вызове цели CallSite, возвращенного этим методом, возвращается результат конкатенации строк; все аргументы функции и константы, переданные методу связывания, используются в качестве входных данных для конкатенации. Сигнатура цели задается 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 — параметр переменного числа аргументов, представляющий константы, переданные методу связывания.
Возвращает:
CallSite, цель которого можно использовать для конкатенации строк с динамическими аргументами конкатенации, описанными заданным concatType.
Вызывает:
StringConcatException — если нарушен какой-либо из описанных здесь инвариантов связывания либо контекст поиска не обладает правами приватного доступа.
NullPointerException — если какой-либо входящий аргумент равен null или любая константа в recipe равна null. Такого никогда не происходит, когда метод начальной загрузки вызывается с помощью invokedynamic.
См. Спецификацию языка Java:
5.1.11 Преобразование в строку
15.18.1 Оператор конкатенации строк +

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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