Интерфейс InterfaceType
- Все суперинтерфейсы:
-
Accessible,Comparable<ReferenceType>,Mirror,ReferenceType,Type
public interface InterfaceType extends ReferenceType
ReferenceType, которое применяется к истинным интерфейсам в смысле определения JLS (не к классу, не к типу массива). Тип интерфейса никогда не будет возвращен методом ObjectReference.referenceType(), но он может быть в списке реализованных интерфейсов для ClassType, который возвращается этим методом.- С момента:
- 1.3
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
List<ClassType> |
implementors() |
Получение текущих подготовленных классов, которые напрямую реализуют этот интерфейс. |
default Value |
invokeMethod |
Вызов указанного статического 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
Подробное описание методов
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 и не будет читать EventSet, который поступает для нового события. Если этот новый EventSet — SUSPEND_ALL, то произойдет тупик, потому что никто не возобновит EventSet. Чтобы этого избежать, все EventRequests должны быть отключены перед вызовом invokeMethod, или вызов invokeMethod не должен происходить из потока обработчика событий клиента.
Возобновление других потоков во время вызова можно предотвратить, установив флаг ClassType.INVOKE_SINGLE_THREADED в параметре options; однако нет защиты или восстановления от описанных выше тупиков, поэтому этот вариант следует использовать с большой осторожностью. Возобновится только указанный поток (как описано для всех потоков выше). По завершении вызова в единственном потоке вызывающий поток будет приостановлен снова. Обратите внимание, что любые потоки, запущенные во время вызова в единственном потоке, не будут приостановлены по завершении вызова.
Если целевая виртуальная машина отключится во время вызова (например, через VirtualMachine.dispose()) вызов метода продолжается.
- Параметры:
-
thread- поток, в котором необходимо вызвать метод. -
method-Methodдля вызова. -
arguments- списокValueаргументов, связанных с вызываемым методом. Значения из списка присваиваются аргументам в порядке их появления в сигнатуре метода. -
options- целочисленный флаг опций. - Возвращает:
- зеркало
Valueвозвращаемого значения вызываемого метода. - Исключения:
-
IllegalArgumentException- если метод не является членом этого интерфейса, если размер списка аргументов не совпадает с количеством объявленных аргументов для метода, или если метод не является статическим или является статической инициализацией. -
ClassNotLoadedException- если какой-либо тип аргумента еще не был загружен через соответствующий загрузчик классов. -
IncompatibleThreadStateException- если указанный поток не был приостановлен событием. -
InvocationException- если вызов метода привел к исключению в целевой виртуальной машине. -
InvalidTypeException- Если типы аргументов не соответствуют требованиям — аргументы типа Object должны быть совместимы с типом аргумента. Это подразумевает, что тип аргумента должен быть загружен через загрузчик классов содержащего класса. Примитивные аргументы должны быть либо совместимы с типом аргумента, либо должны быть преобразуемы в тип аргумента без потери информации. См. раздел 5.2 JLS для получения дополнительной информации о совместимости присваивания. -
VMCannotBeModifiedException- если виртуальная машина является только для чтения — см.VirtualMachine.canBeModified(). - С момента:
- 1.8
© 1993, 2021, 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/17/docs/api/jdk.jdi/com/sun/jdi/InterfaceType.html