Класс CallSiteDescriptor
- java.lang.Object
-
- jdk.dynalink.SecureLookupSupplier
-
- jdk.dynalink.CallSiteDescriptor
public class CallSiteDescriptor extends SecureLookupSupplier
Описания сайтов вызова содержат всю необходимую информацию для связывания сайта вызова. Эта информация обычно передается в качестве параметров методам загрузки и состоит из объекта MethodHandles.Lookup класса вызывающего метода, в котором происходит вызов, динамической операции на сайте вызова и типа метода сайта вызова. CallSiteDescriptor объекты используются в Dynalink для захвата и хранения этих параметров для последующего использования DynamicLinker.
Конструкторы встроенных реализаций RelinkableCallSite принимают описание сайта вызова.
Описания сайтов вызова должны быть неизменяемыми. Вы можете использовать этот класс как есть, или вы можете наследоваться от него, особенно если вам нужно добавить дополнительную информацию в описания (обычно, значения, передаваемые в дополнительных параметрах методу загрузки). Поскольку описания должны быть неизменяемыми, вы можете создать кеш эквивалентных описаний, чтобы сайты вызова могли использовать их совместно.
Класс расширяет SecureLookupSupplier для обеспечения проверки доступа к объекту MethodHandles.Lookup, который он несет. Этот поиск должен использоваться для поиска дескрипторов методов, которые нужно установить в качестве целей сайта вызова, описываемого этим дескриптором.
Поля
Поля, объявленные в классе jdk.dynalink.SecureLookupSupplier
GET_LOOKUP_PERMISSION_NAME
Конструкторы
| Конструктор | Описание |
|---|---|
CallSiteDescriptor(MethodHandles.Lookup lookup,
Operation operation,
MethodType methodType) |
Создает новый дескриптор сайта вызова. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
CallSiteDescriptor |
changeMethodType(MethodType newMethodType) |
Находит или создает описание сайта вызова, которое отличается от этого описания только типом метода. |
protected CallSiteDescriptor |
changeMethodTypeInternal(MethodType newMethodType) |
Находит или создает описание сайта вызова, которое отличается от этого описания только типом метода. |
CallSiteDescriptor |
changeOperation(Operation newOperation) |
Находит или создает описание сайта вызова, которое отличается от этого описания только операцией. |
protected CallSiteDescriptor |
changeOperationInternal(Operation newOperation) |
Находит или создает описание сайта вызова, которое отличается от этого описания только операцией. |
boolean |
equals(Object obj) |
Возвращает true, если это описание сайта вызова равно переданному объекту. |
MethodType |
getMethodType() |
Тип метода на сайте вызова. |
Operation |
getOperation() |
Возвращает операцию на сайте вызова. |
int |
hashCode() |
Возвращает хэш-код этого описания сайта вызова, вычисленный на основе его операции, типа метода и класса поиска объекта поиска и режимов поиска. |
String |
toString() |
Возвращает строковое представление этого описания сайта вызова в формате |
Методы, объявленные в классе jdk.dynalink.SecureLookupSupplier
getLookup, getLookupPrivileged
Методы, объявленные в классе java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Конструкторы
CallSiteDescriptor
public CallSiteDescriptor(MethodHandles.Lookup lookup,
Operation operation,
MethodType methodType)
Создает новый дескриптор сайта вызова.
- Параметры:
-
lookup- объект поиска, описывающий класс, к которому относится сайт вызова. При создании описаний из метода загрузкиjava.lang.invoke, это должен быть поиск, переданный в метод загрузки. -
operation- динамическая операция на сайте вызова. -
methodType- тип метода сайта вызова. При создании описаний из метода загрузкиjava.lang.invoke, это должен быть тип метода, переданный в метод загрузки.
Методы
getOperation
public final Operation getOperation()
Возвращает операцию на сайте вызова.
- Возвращает:
- операция на сайте вызова.
getMethodType
public final MethodType getMethodType()
Тип метода на сайте вызова.
- Возвращает:
- тип метода на сайте вызова.
changeMethodType
public final CallSiteDescriptor changeMethodType(MethodType newMethodType)
Находит или создает описание сайта вызова, которое отличается от этого описания только типом метода. Вызывает changeMethodTypeInternal(MethodType).
- Параметры:
-
newMethodType- новый тип метода - Возвращает:
- описание сайта вызова с измененным типом метода.
- Исключения:
-
NullPointerException- еслиnewMethodTypeравно null.
changeMethodTypeInternal
protected CallSiteDescriptor changeMethodTypeInternal(MethodType newMethodType)
Находит или создает описание сайта вызова, которое отличается от этого описания только типом метода. Подклассы должны переопределять этот метод для возвращения объекта своего точного класса. Если переопределенный метод изменяет что-либо, кроме типа метода в описании (его класс, поиск или операция), или возвращает null, из changeMethodType(MethodType) будет выброшено AssertionError.
- Параметры:
-
newMethodType- новый тип метода - Возвращает:
- описание сайта вызова с измененным типом метода.
changeOperation
public final CallSiteDescriptor changeOperation(Operation newOperation)
Находит или создает описание сайта вызова, которое отличается от этого описания только операцией. Вызывает changeOperationInternal(Operation).
- Параметры:
-
newOperation- новая операция - Возвращает:
- описание сайта вызова с измененной операцией.
- Исключения:
-
NullPointerException- еслиnewOperationравно null. -
SecurityException- если поиск дескриптора не являетсяMethodHandles.publicLookup(), и менеджер безопасности присутствует, и проверкаRuntimePermission("dynalink.getLookup")терпит неудачу. Это необходимо, поскольку изменение операции в описании сайта вызова позволяет создавать описания для произвольных операций с поиском.
changeOperationInternal
protected CallSiteDescriptor changeOperationInternal(Operation newOperation)
Находит или создает описание сайта вызова, которое отличается от этого описания только операцией. Подклассы должны переопределять этот метод для возвращения объекта своего точного класса. Если переопределенный метод изменяет что-либо, кроме операции в описании (его класс, поиск или тип метода), или возвращает null, из changeOperation(Operation) будет выброшено AssertionError.
- Параметры:
-
newOperation- новая операция - Возвращает:
- описание сайта вызова с измененной операцией.
equals
public boolean equals(Object obj)
Возвращает true, если это описание сайта вызова равно переданному объекту. Оно считается равным, если другой объект имеет точно тот же класс, их операции и типы методов равны, и их поиски имеют одинаковый MethodHandles.Lookup.lookupClass() и MethodHandles.Lookup.lookupModes().
- Переопределяет:
-
equalsв классеObject - Параметры:
-
obj- объект-ссылка для сравнения. - Возвращает:
-
trueесли этот объект такой же, как аргумент obj;falseв противном случае. - См. также:
-
Object.hashCode(),HashMap
hashCode
public int hashCode()
Возвращает хэш-код этого описания сайта вызова, вычисленный на основе его операции, типа метода и класса поиска объекта поиска и режимов поиска.
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- хэш-код, основанный на значении для этого описания сайта вызова.
- См. также:
-
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
toString
public String toString()
Возвращает строковое представление этого описания сайта вызова в формате name(parameterTypes)returnType@lookup.
© 1993, 2020, 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/11/docs/api/jdk.dynalink/jdk/dynalink/CallSiteDescriptor.html