CallSite Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Является CallSite
держателем для переменной MethodHandle
, которая называется ее target
.
[Android.Runtime.Register("java/lang/invoke/CallSite", ApiSince=26, DoNotGenerateAcw=true)]
public abstract class CallSite : Java.Lang.Object
[<Android.Runtime.Register("java/lang/invoke/CallSite", ApiSince=26, DoNotGenerateAcw=true)>]
type CallSite = class
inherit Object
- Наследование
- Производный
- Атрибуты
Комментарии
Является CallSite
держателем для переменной MethodHandle
, которая называется ее target
. Инструкция, связанная invokedynamic
с , CallSite
делегирует все вызовы к текущему целевому объекту сайта. Объект CallSite
может быть связан с несколькими invokedynamic
инструкциями или может быть "свободно плавающим", не связанным ни с одной из них. В любом случае его можно вызвать с помощью связанного дескриптора метода, который называется динамическим вызовом #dynamicInvoker.
CallSite
— это абстрактный класс, который не допускает прямое подклассирование пользователями. Он содержит три непосредственных конкретных подкласса, которые могут быть либо экземплярами, либо подклассами. <ul><li>Если изменяемый целевой invokedynamic
объект не требуется, инструкция может быть постоянно привязана с помощью сайта вызова константы ConstantCallSite. <Li>Если требуется изменяемый целевой объект с семантикой переменных переменных, так как обновления целевого объекта должны быть немедленно и надежно засвидетельствованы другими потоками, может использоваться сайт вызовов VolatileCallSite volatile. <Li В>противном случае, если требуется изменяемый целевой объект, можно использовать изменяемый сайт вызова MutableCallSite. </ul>
Неконстантный сайт вызовов может быть <>перелиняться</em> путем изменения целевого объекта. Новый целевой объект должен иметь тот же тип MethodHandle#type(), что и предыдущий целевой объект. Таким образом, хотя сайт вызова можно повторно связать с рядом последовательных целевых объектов, он не может изменить свой тип.
Ниже приведен пример использования сайтов вызовов и методов начальной загрузки, которые связывают каждый динамический сайт вызова для вывода его аргументов: <blockquote>
{@code
static void test() throws Throwable {
// THE FOLLOWING LINE IS PSEUDOCODE FOR A JVM INSTRUCTION
InvokeDynamic[#bootstrapDynamic].baz("baz arg", 2, 3.14);
}
private static void printArgs(Object... args) {
System.out.println(java.util.Arrays.deepToString(args));
}
private static final MethodHandle printArgs;
static {
MethodHandles.Lookup lookup = MethodHandles.lookup();
Class thisClass = lookup.lookupClass(); // (who am I?)
printArgs = lookup.findStatic(thisClass,
"printArgs", MethodType.methodType(void.class, Object[].class));
}
private static CallSite bootstrapDynamic(MethodHandles.Lookup caller, String name, MethodType type) {
// ignore caller and name, but match the type:
return new ConstantCallSite(printArgs.asType(type));
}
}
</blockquote>
Документация по Java для java.lang.invoke.CallSite
.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.
Конструкторы
CallSite(IntPtr, JniHandleOwnership) |
Является |
Свойства
Class |
Возвращает класс среды выполнения данного объекта |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
JniIdentityHashCode |
Является |
JniPeerMembers |
Является |
PeerReference |
Является |
Target |
Является |
ThresholdClass |
Является |
ThresholdType |
Является |
Методы
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
Dispose() |
Является |
Dispose(Boolean) |
Является |
DynamicInvoker() |
Создает дескриптор метода, эквивалентный инструкции invokedynamic, связанной с этим сайтом вызова. |
Equals(Object) |
Указывает, равен ли какой-то другой объект этому объекту. (Унаследовано от Object) |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
JavaFinalize() |
Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект . (Унаследовано от Object) |
Notify() |
Пробуждает один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
NotifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. (Унаследовано от Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
ToArray<T>() |
Является |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
Type() |
Возвращает тип целевого объекта этого сайта вызова. |
UnregisterFromRuntime() |
Является |
Wait() |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.>< (Унаследовано от Object) |
Wait(Int64) |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени. (Унаследовано от Object) |
Wait(Int64, Int32) |
Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
Является |
IJavaPeerable.DisposeUnlessReferenced() |
Является |
IJavaPeerable.Finalized() |
Является |
IJavaPeerable.JniManagedPeerState |
Является |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Является |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Является |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Является |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверенного средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Является |
GetJniTypeName(IJavaPeerable) |
Является |