Класс GuardedInvocation
java.lang.Object
jdk.dynalink.linker.GuardedInvocation
public class GuardedInvocation extends Object
Представляет условно допустимый дескриптор метода. Обычно создаётся в качестве возвращаемого значения методов
GuardingDynamicLinker.getGuardedInvocation(LinkRequest, LinkerServices) и GuardingTypeConverterFactory.convertToType(Class, Class, Supplier). Это неизменяемый кортеж, состоящий из дескриптора метода вызова, дескриптора метода-предохранителя, определяющего применимость дескриптора вызова, нуля или более точек переключения, которые можно использовать для внешней инвалидации дескриптора вызова, и типа исключения, при выбросе которого во время вызова дескриптора он также инвалидируется. Дескриптор вызова можно вызывать, если дескриптор-предохранитель возвращает true для своих аргументов, пока ни одна из точек переключения не инвалидирована и пока не выбрасывается исключение указанного типа. Предохранитель, точки переключения и тип исключения являются необязательными (защищённый вызов, не содержащий ни одного из них, действителен безусловно).- Начиная с:
- 9
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
GuardedInvocation |
Создаёт новый безусловный защищённый вызов. |
GuardedInvocation |
Создаёт новый защищённый вызов с дескриптором метода-предохранителя. |
GuardedInvocation |
Создаёт новый защищённый вызов с дескриптором метода-предохранителя и точкой переключения, которую можно использовать для его инвалидации. |
GuardedInvocation |
Создаёт новый защищённый вызов с дескриптором метода-предохранителя, любым количеством точек переключения, которые можно использовать для его инвалидации, и исключением, при выбросе которого во время вызова он также инвалидируется. |
GuardedInvocation |
Создаёт новый защищённый вызов с дескриптором метода-предохранителя, точкой переключения, которую можно использовать для его инвалидации, и исключением, при выбросе которого во время вызова он также инвалидируется. |
GuardedInvocation |
Создаёт новый защищённый вызов, который можно инвалидировать с помощью точки переключения. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
GuardedInvocation |
addSwitchPoint |
Создаёт новый защищённый вызов с добавленной точкой переключения. |
GuardedInvocation |
asType |
Изменяет тип вызова так, как если бы к вызову и его предохранителю (если он есть) был применён MethodHandle.asType(MethodType) (тип возвращаемого значения предохранителя изменяется на boolean, а количество его параметров может быть сокращено). |
GuardedInvocation |
asType |
Изменяет тип вызова так, как если бы к вызову и его предохранителю (если он есть) был применён MethodHandle.asType(MethodType) (тип возвращаемого значения предохранителя изменяется на boolean). |
GuardedInvocation |
asType |
Изменяет тип вызова так, как если бы к вызову и его предохранителю (если он есть) был применён LinkerServices.asType(MethodHandle, MethodType) (тип возвращаемого значения предохранителя изменяется на boolean, а количество его параметров может быть сокращено). |
GuardedInvocation |
asTypeSafeReturn |
Изменяет тип вызова так, как если бы к вызову был применён LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType), а к его предохранителю (если он есть) — LinkerServices.asType(MethodHandle, MethodType) (тип возвращаемого значения предохранителя изменяется на boolean, а количество его параметров может быть сокращено). |
MethodHandle |
compose |
Объединяет вызов, предохранитель, точки переключения и исключение в составной дескриптор метода, который умеет переходить к запасному варианту, если предохранитель не срабатывает или вызов инвалидируется. |
MethodHandle |
compose |
Объединяет вызов, предохранитель, точки переключения и исключение в составной дескриптор метода, который умеет переходить к запасному варианту, если предохранитель не срабатывает или вызов инвалидируется. |
GuardedInvocation |
dropArguments |
Создаёт вызов, отбрасывающий аргументы как у вызова, так и у предохранителя (если он есть и имеет не менее pos параметров) с помощью MethodHandles.dropArguments(MethodHandle, int, Class...). |
GuardedInvocation |
dropArguments |
Создаёт вызов, отбрасывающий аргументы как у вызова, так и у предохранителя (если он есть и имеет не менее pos параметров) с помощью MethodHandles.dropArguments(MethodHandle, int, List). |
GuardedInvocation |
filterArguments |
Применяет фильтры аргументов к вызову и предохранителю (если он есть и имеет не менее pos + 1 параметров) с помощью MethodHandles.filterArguments(MethodHandle, int, MethodHandle...). |
Class |
getException() |
Возвращает тип исключения, выброс которого вызовом должен инвалидировать связывание этого защищённого вызова. |
MethodHandle |
getGuard() |
Возвращает дескриптор метода-предохранителя. |
MethodHandle |
getInvocation() |
Возвращает дескриптор метода вызова. |
SwitchPoint[] |
getSwitchPoints() |
Возвращает точки переключения, которые можно использовать для инвалидации связывания этого дескриптора вызова. |
boolean |
hasBeenInvalidated() |
Возвращает true тогда и только тогда, когда хотя бы одна точка переключения этого защищённого вызова инвалидирована. |
GuardedInvocation |
replaceMethods |
Создаёт новый защищённый вызов с другими методами, сохраняя точку переключения. |
Подробное описание конструкторов
GuardedInvocation
public GuardedInvocation(MethodHandle invocation)
Создаёт новый безусловный защищённый вызов. Он является безусловным, поскольку не содержит инвалидаций.
- Параметры:
-
invocation— дескриптор метода, представляющий вызов. Не должен быть null. - Исключения:
-
NullPointerException— если invocation равен null.
GuardedInvocation
public GuardedInvocation(MethodHandle invocation, MethodHandle guard)
Создаёт новый защищённый вызов с дескриптором метода-предохранителя.
- Параметры:
-
invocation— дескриптор метода, представляющий вызов. Не должен быть null. -
guard— дескриптор метода, представляющий предохранитель. Должен быть совместим с дескрипторомinvocationсогласноMethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle). Примеры полезных предохранителей см. в классеGuards. Может быть null, что означает безусловный вызов. - Исключения:
-
NullPointerException— если invocation равен null.
GuardedInvocation
public GuardedInvocation(MethodHandle invocation, SwitchPoint switchPoint)
Создаёт новый защищённый вызов, который можно инвалидировать с помощью точки переключения.
- Параметры:
-
invocation— дескриптор метода, представляющий вызов. Не должен быть null. -
switchPoint— необязательная точка переключения, которую можно использовать для инвалидации этого связывания. Может быть null. Если она равна null, вызов является безусловным. - Исключения:
-
NullPointerException— если invocation равен null.
GuardedInvocation
public GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint)
Создаёт новый защищённый вызов с дескриптором метода-предохранителя и точкой переключения, которую можно использовать для его инвалидации.
- Параметры:
-
invocation— дескриптор метода, представляющий вызов. Не должен быть null. -
guard— дескриптор метода, представляющий предохранитель. Должен быть совместим с дескрипторомinvocationсогласноMethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle). Примеры полезных предохранителей см. в классеGuards. Может быть null. Если он и точка переключения равны null, вызов является безусловным. -
switchPoint— необязательная точка переключения, которую можно использовать для инвалидации этого связывания. - Исключения:
-
NullPointerException— если invocation равен null.
GuardedInvocation
public GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint switchPoint, Class<? extends Throwable> exception)
Создаёт новый защищённый вызов с дескриптором метода-предохранителя, точкой переключения, которую можно использовать для его инвалидации, и исключением, при выбросе которого во время вызова он также инвалидируется.
- Параметры:
-
invocation— дескриптор метода, представляющий вызов. Не должен быть null. -
guard— дескриптор метода, представляющий предохранитель. Должен быть совместим с дескрипторомinvocationсогласноMethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle). Примеры полезных предохранителей см. в классеGuards. Может быть null. Если он, точка переключения и исключение равны null, вызов является безусловным. -
switchPoint— необязательная точка переключения, которую можно использовать для инвалидации этого связывания. -
exception— необязательный тип исключения, выброс которого вызовом также инвалидирует его. - Исключения:
-
NullPointerException— если invocation равен null.
GuardedInvocation
public GuardedInvocation(MethodHandle invocation, MethodHandle guard, SwitchPoint[] switchPoints, Class<? extends Throwable> exception)
Создаёт новый защищённый вызов с дескриптором метода-предохранителя, любым количеством точек переключения, которые можно использовать для его инвалидации, и исключением, при выбросе которого во время вызова он также инвалидируется.
- Параметры:
-
invocation— дескриптор метода, представляющий вызов. Не должен быть null. -
guard— дескриптор метода, представляющий предохранитель. Должен быть совместим с дескрипторомinvocationсогласноMethodHandles.guardWithTest(MethodHandle, MethodHandle, MethodHandle). Примеры полезных предохранителей см. в классеGuards. Может быть null. Если он и исключение равны null и точки переключения не указаны, вызов является безусловным. -
switchPoints— необязательные точки переключения, которые можно использовать для инвалидации этого связывания. -
exception— необязательный тип исключения, выброс которого вызовом также инвалидирует его. - Исключения:
-
NullPointerException— если invocation равен null.
Подробное описание методов
getInvocation
public MethodHandle getInvocation()
Возвращает дескриптор метода вызова.
- Возвращает:
- дескриптор метода вызова. Никогда не равен null.
getGuard
public MethodHandle getGuard()
Возвращает дескриптор метода-предохранителя.
- Возвращает:
- дескриптор метода-предохранителя. Может быть null.
getSwitchPoints
public SwitchPoint[] getSwitchPoints()
Возвращает точки переключения, которые можно использовать для инвалидации связывания этого дескриптора вызова.
- Возвращает:
- точки переключения, которые можно использовать для инвалидации связывания этого дескриптора вызова. Может быть null.
getException
public Class<? extends Throwable> getException()
Возвращает тип исключения, выброс которого вызовом должен инвалидировать связывание этого защищённого вызова.
- Возвращает:
- тип исключения, выброс которого должен использоваться для инвалидации связывания. Может быть null.
hasBeenInvalidated
public boolean hasBeenInvalidated()
Возвращает true тогда и только тогда, когда хотя бы одна точка переключения этого защищённого вызова инвалидирована.
- Возвращает:
- true тогда и только тогда, когда хотя бы одна точка переключения этого защищённого вызова инвалидирована.
replaceMethods
public GuardedInvocation replaceMethods(MethodHandle newInvocation, MethodHandle newGuard)
Создаёт новый защищённый вызов с другими методами, сохраняя точку переключения.
- Параметры:
-
newInvocation— новый вызов -
newGuard— новый предохранитель - Возвращает:
- новый защищённый вызов с заменёнными методами и той же точкой переключения, что и у этого вызова.
addSwitchPoint
public GuardedInvocation addSwitchPoint(SwitchPoint newSwitchPoint)
Создаёт новый защищённый вызов с добавленной точкой переключения.
- Параметры:
-
newSwitchPoint— новая точка переключения. Может быть null; в этом случае метод возвращает текущий защищённый вызов без изменений. - Возвращает:
- защищённый вызов с добавленной точкой переключения.
asType
public GuardedInvocation asType(MethodType newType)
Изменяет тип вызова так, как если бы к вызову и его предохранителю (если он есть) был применён
MethodHandle.asType(MethodType) (тип возвращаемого значения предохранителя изменяется на boolean, а количество его параметров может быть сокращено). Если вызов уже имеет требуемый тип, возвращает этот объект.- Параметры:
-
newType— новый тип вызова. - Возвращает:
- защищённый вызов с применённым к нему новым типом.
asType
public GuardedInvocation asType(LinkerServices linkerServices, MethodType newType)
Изменяет тип вызова так, как если бы к вызову и его предохранителю (если он есть) был применён
LinkerServices.asType(MethodHandle, MethodType) (тип возвращаемого значения предохранителя изменяется на boolean, а количество его параметров может быть сокращено). Если вызов уже имеет требуемый тип, возвращает этот объект.- Параметры:
-
linkerServices— службы связывания, используемые для преобразования -
newType— новый тип вызова. - Возвращает:
- защищённый вызов с применённым к нему новым типом.
asTypeSafeReturn
public GuardedInvocation asTypeSafeReturn(LinkerServices linkerServices, MethodType newType)
Изменяет тип вызова так, как если бы к вызову был применён
LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType), а к его предохранителю (если он есть) — LinkerServices.asType(MethodHandle, MethodType) (тип возвращаемого значения предохранителя изменяется на boolean, а количество его параметров может быть сокращено). Если тип вызова не изменяется, возвращает этот объект.- Параметры:
-
linkerServices— службы связывания, используемые для преобразования -
newType— новый тип вызова. - Возвращает:
- защищённый вызов с применённым к нему новым типом.
asType
public GuardedInvocation asType(CallSiteDescriptor desc)
Изменяет тип вызова так, как если бы к вызову и его предохранителю (если он есть) был применён
MethodHandle.asType(MethodType) (тип возвращаемого значения предохранителя изменяется на boolean). Если вызов уже имеет требуемый тип, возвращает этот объект.- Параметры:
-
desc— дескриптор вызова, тип метода которого адаптируется. - Возвращает:
- защищённый вызов с применённым к нему новым типом.
filterArguments
public GuardedInvocation filterArguments(int pos, MethodHandle... filters)
Применяет фильтры аргументов к вызову и предохранителю (если он есть и имеет не менее
pos + 1 параметров) с помощью MethodHandles.filterArguments(MethodHandle, int, MethodHandle...).- Параметры:
-
pos— позиция первого фильтруемого аргумента -
filters— фильтры аргументов - Возвращает:
- вызов с фильтрами
dropArguments
public GuardedInvocation dropArguments(int pos, List<Class<?>> valueTypes)
Создаёт вызов, отбрасывающий аргументы как у вызова, так и у предохранителя (если он есть и имеет не менее
pos параметров) с помощью MethodHandles.dropArguments(MethodHandle, int, List).- Параметры:
-
pos— позиция первого отбрасываемого аргумента -
valueTypes— типы отбрасываемых значений - Возвращает:
- вызов, отбрасывающий аргументы
dropArguments
public GuardedInvocation dropArguments(int pos, Class<?>... valueTypes)
Создаёт вызов, отбрасывающий аргументы как у вызова, так и у предохранителя (если он есть и имеет не менее
pos параметров) с помощью MethodHandles.dropArguments(MethodHandle, int, Class...).- Параметры:
-
pos— позиция первого отбрасываемого аргумента -
valueTypes— типы отбрасываемых значений - Возвращает:
- вызов, отбрасывающий аргументы
compose
public MethodHandle compose(MethodHandle fallback)
Объединяет вызов, предохранитель, точки переключения и исключение в составной дескриптор метода, который умеет переходить к запасному варианту, если предохранитель не срабатывает или вызов инвалидируется.
- Параметры:
-
fallback— запасной дескриптор метода на случай инвалидации точки переключения, возврата предохранителем false или выброса инвалидирующего исключения. - Возвращает:
- составной дескриптор метода.
compose
public MethodHandle compose(MethodHandle guardFallback, MethodHandle switchpointFallback, MethodHandle catchFallback)
Объединяет вызов, предохранитель, точки переключения и исключение в составной дескриптор метода, который умеет переходить к запасному варианту, если предохранитель не срабатывает или вызов инвалидируется.
- Параметры:
-
guardFallback— запасной дескриптор метода на случай, если предохранитель возвращает false. -
switchpointFallback— запасной дескриптор метода на случай инвалидации точки переключения. -
catchFallback— запасной метод на случай срабатывания обработчика исключений. - Возвращает:
- составной дескриптор метода.
© 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/jdk.dynalink/jdk/dynalink/linker/GuardedInvocation.html