Spec-Zone.ru › OpenJDK 21

Интерфейс InterfaceType

Все суперинтерфейсы:
Accessible, Comparable<ReferenceType>, Mirror, ReferenceType, Type
public interface InterfaceType extends ReferenceType
Зеркало интерфейса в целевой виртуальной машине. InterfaceType — это уточнение ReferenceType, которое применяется к истинным интерфейсам в смысле определения JLS (не класс, не тип массива). Тип интерфейса никогда не будет возвращен методом ObjectReference.referenceType(), но он может присутствовать в списке реализованных интерфейсов для ClassType, который возвращается этим методом.
С:
1.3
См. также:
  • ObjectReference

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

Модификатор и тип Метод Описание
List<ClassType> implementors()
Возвращает текущие подготовленные классы, которые напрямую реализуют этот интерфейс.
default Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
Вызывает указанный статический Method в целевой виртуальной машине.
List<InterfaceType> subinterfaces()
Возвращает текущие подготовленные интерфейсы, которые напрямую расширяют этот интерфейс.
List<InterfaceType> superinterfaces()
Возвращает интерфейсы, напрямую расширяемые этим интерфейсом.

Методы, объявленные в интерфейсе com.sun.jdi.Accessible

isPackagePrivate, isPrivate, isProtected, isPublic, modifiers

Методы, объявленные в интерфейсе java.lang.Comparable

compareTo

Методы, объявленные в интерфейсе com.sun.jdi.Mirror

toString, virtualMachine

Методы, объявленные в интерфейсе com.sun.jdi.ReferenceType

allFields, allLineLocations, allLineLocations, allMethods, availableStrata, classLoader, classObject, constantPool, constantPoolCount, defaultStratum, equals, failedToInitialize, fieldByName, fields, genericSignature, getValue, getValues, hashCode, instances, isAbstract, isFinal, isInitialized, isPrepared, isStatic, isVerified, locationsOfLine, locationsOfLine, majorVersion, methods, methodsByName, methodsByName, minorVersion, module, name, nestedTypes, sourceDebugExtension, sourceName, sourceNames, sourcePaths, visibleFields, visibleMethods

Методы, объявленные в интерфейсе com.sun.jdi.Type

signature

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

superinterfaces

List<InterfaceType> superinterfaces()
Возвращает интерфейсы, напрямую расширяемые этим интерфейсом. Возвращаемый список содержит только те интерфейсы, которые этот интерфейс заявил как расширяемые.
Возвращает:
список объектов InterfaceType, каждый из которых отображает интерфейс, расширяемый этим интерфейсом. Если таких нет, возвращает список нулевой длины.
Исключения:
ClassNotPreparedException - если этот класс еще не подготовлен.

subinterfaces

List<InterfaceType> subinterfaces()
Возвращает текущие подготовленные интерфейсы, которые напрямую расширяют этот интерфейс. Возвращаемый список содержит только те интерфейсы, которые заявили об этом интерфейсе в своей части "extends".
Возвращает:
список объектов InterfaceType, каждый из которых отображает интерфейс, расширяющий этот интерфейс. Если таких нет, возвращает список нулевой длины.

implementors

List<ClassType> implementors()
Возвращает текущие подготовленные классы, которые напрямую реализуют этот интерфейс. Возвращаемый список содержит только те классы, которые заявили об этом интерфейсе в своей части "implements".
Возвращает:
список объектов ClassType, каждый из которых отображает класс, реализующий этот интерфейс. Если таких нет, возвращает список нулевой длины.

invokeMethod

default Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Вызывает указанный статический Method в целевой виртуальной машине. Указанный метод должен быть определен в этом интерфейсе. Метод должен быть статическим, но не статической инициализацией.

Вызов метода произойдет в указанной нити. Вызов метода возможен только если указанная нить была приостановлена событием, произошедшим в этой нити. Вызов метода не поддерживается, когда целевая виртуальная машина приостановлена через VirtualMachine.suspend() или когда указанная нить приостановлена через ThreadReference.suspend().

Указанный метод вызывается с аргументами в указанном списке аргументов. Вызов метода является синхронным; этот метод не возвращает значение, пока вызываемый метод не вернет значение в целевой виртуальной машине. Если вызываемый метод выбрасывает исключение, этот метод выбросит InvocationException, содержащий зеркало к объекту исключения, выброшенному.

Аргументы объекта должны быть совместимы по присваиванию с типом аргумента (это подразумевает, что тип аргумента должен быть загружен через загрузчик класса, содержащего класс). Примитивные аргументы должны быть либо совместимы по присваиванию с типом аргумента, либо должны быть преобразуемы в тип аргумента без потери информации. Если вызываемый метод принимает переменное количество аргументов, то последний тип аргумента — массив некоторого типа компонентов. Аргумент в соответствующей позиции может быть опущен или равен null, массивом того же типа компонентов или аргументом типа компонента, за которым следует любое количество других аргументов того же типа. Если аргумент опущен, то передаётся массив нулевой длины соответствующего типа компонентов. Тип компонента может быть примитивным типом. Автоупаковка не поддерживается. См. раздел 5.2 спецификации языка Java для получения дополнительной информации о совместимости по присваиванию.

По умолчанию все потоки в целевой виртуальной машине возобновляются во время вызова метода, если они были ранее приостановлены событием или через VirtualMachine.suspend() или ThreadReference.suspend(). Это делается для предотвращения тупиков, которые произойдут, если какая-либо из нитей владеет мониторами, которые понадобятся вызываемому методу. Однако обратите внимание, что это неявное возобновление действует точно так же, как ThreadReference.resume(), поэтому если счётчик приостановки нити больше 1, она останется в приостановленном состоянии во время вызова, и в результате тупик всё ещё может возникнуть. По умолчанию, когда вызов завершается, все потоки в целевой виртуальной машине приостанавливаются, независимо от их состояния до вызова. Возможны точки останова или другие события во время вызова. Это может привести к тупикам, как описано выше. Это также может привести к тупику, если invokeMethod вызывается из обработчика событий клиента. В этом случае этот поток будет ожидать завершения invokeMethod и не будет читать набор событий, поступающий для нового события. Если этот новый набор событий — SUSPEND_ALL, то произойдёт тупик, потому что никто не возобновит набор событий. Для предотвращения этого все запросы на события должны быть отключены до вызова invokeMethod, или invokeMethod не должен вызываться из потока обработчика событий клиента.

Возобновление других потоков во время вызова можно предотвратить, установив флаг ClassType.INVOKE_SINGLE_THREADED в аргументе options; однако нет защиты или восстановления от тупиков, описанных выше, поэтому этот вариант следует использовать с большой осторожностью. Только указанный поток будет возобновлён (как описано для всех потоков выше). По завершении однопоточного вызова вызывающий поток будет снова приостановлен. Обратите внимание, что любые потоки, запущенные во время однопоточного вызова, не будут приостановлены при завершении вызова.

Если целевая виртуальная машина отключена во время вызова (например, через VirtualMachine.dispose()), вызов метода продолжается.

Параметры:
thread - нить, в которой необходимо вызвать.
method - Method для вызова.
arguments - список Value аргументов, привязанных к вызываемому методу. Значения из списка присваиваются аргументам в порядке их появления в сигнатуре метода.
options - целое числовое значение флагов опций.
Возвращает:
зеркало Value возвращаемого значения вызываемого метода.
Исключения:
IllegalArgumentException - если метод не является членом этого интерфейса, если размер списка аргументов не соответствует количеству объявленных аргументов для метода или если метод не статический или является статической инициализацией.
ClassNotLoadedException - если какой-либо тип аргумента еще не загружен через соответствующий загрузчик классов.
IncompatibleThreadStateException - если указанная нить не была приостановлена событием.
InvocationException - если вызов метода привел к исключению в целевой виртуальной машине.
InvalidTypeException - Если аргументы не соответствуют этому требованию — аргументы объекта должны быть совместимы по присваиванию с типом аргумента. Это подразумевает, что тип аргумента должен быть загружен через загрузчик класса, содержащего класс. Примитивные аргументы должны быть либо совместимы по присваиванию с типом аргумента, либо должны быть преобразуемы в тип аргумента без потери информации. См. раздел 5.2 JLS для получения дополнительной информации о совместимости по присваиванию.
VMCannotBeModifiedException - если виртуальная машина является только для чтения — см. VirtualMachine.canBeModified().
С:
1.8

© 1993, 2023, 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/21/docs/api/jdk.jdi/com/sun/jdi/InterfaceType.html

Spec-Zone.ru

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