Интерфейс InterfaceType
- Все суперинтерфейсы:
-
Accessible,Comparable<ReferenceType>,Mirror,ReferenceType,Type
public interface InterfaceType extends ReferenceType
ReferenceType, которое применяется к истинным интерфейсам в смысле определения JLS (не класс, не тип массива). Тип интерфейса никогда не будет возвращен методом ObjectReference.referenceType(), но он может присутствовать в списке реализованных интерфейсов для ClassType, который возвращается этим методом.- С:
- 1.3
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
List |
implementors() |
Возвращает текущие подготовленные классы, которые напрямую реализуют этот интерфейс. |
default Value |
invokeMethod |
Вызывает указанный статический Method в целевой виртуальной машине. |
List |
subinterfaces() |
Возвращает текущие подготовленные интерфейсы, которые напрямую расширяют этот интерфейс. |
List |
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
Подробное описание методов
superinterfaces
List<InterfaceType> superinterfaces()
- Возвращает:
- список объектов
InterfaceType, каждый из которых отображает интерфейс, расширяемый этим интерфейсом. Если таких нет, возвращает список нулевой длины. - Исключения:
-
ClassNotPreparedException- если этот класс еще не подготовлен.
subinterfaces
List<InterfaceType> subinterfaces()
- Возвращает:
- список объектов
InterfaceType, каждый из которых отображает интерфейс, расширяющий этот интерфейс. Если таких нет, возвращает список нулевой длины.
implementors
List<ClassType> implementors()
- Возвращает:
- список объектов
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