Интерфейс 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) | Вызывает указанный статический |
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, массивом того же типа компонента, или аргументом типа компонента, после которого может следовать любое количество других аргументов того же типа. Если аргумент опущен, передается массив длины 0 типа компонента. Тип компонента может быть примитивным типом. Автоупаковка не поддерживается. Для получения более подробной информации о совместимости по присваиванию см. раздел 5.2 Спецификации языка Java™.
По умолчанию все потоки в целевой виртуальной машине возобновляются, пока вызывается метод, если они ранее были приостановлены событием или с помощью VirtualMachine.suspend() или ThreadReference.suspend(). Это делается для предотвращения тупиков, которые могут возникнуть, если любой из потоков владеет мониторами, которые понадобятся вызываемому методу. Обратите внимание, однако, что это неявное возобновление работает точно так же, как ThreadReference.resume(), поэтому если счётчик приостановки потока больше 1, он останется в приостановленном состоянии во время вызова, и таким образом тупик всё ещё может возникнуть. По умолчанию, по завершении вызова, все потоки в целевой виртуальной машине приостанавливаются независимо от их состояния перед вызовом. Возможно, что во время вызова могут произойти точки останова или другие события. Это может привести к тупиковым ситуациям, как описано выше. Это также может привести к тупику, если invokeMethod вызывается из потока обработчика событий клиента. В этом случае этот поток будет ждать завершения invokeMethod и не будет читать EventSet, который поступает для нового события. Если этот новый EventSet — SUSPEND_ALL, то произойдет тупиковая ситуация, потому что никто не возобновит EventSet. Для предотвращения этого, все EventRequest должны быть отключены до вызова 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 является только для чтения — см.VirtualMachine.canBeModified(). - С:
- 1.8
© 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.jdi/com/sun/jdi/InterfaceType.html