Интерфейс 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 и не будет читать EventSet, поступающий для нового события. Если этот новый EventSet — это SUSPEND_ALL, то произойдёт тупик, так как никто не возобновит EventSet. Чтобы этого избежать, все EventRequests должны быть отключены перед выполнением invokeMethod или invokeMethod не должен выполняться из потока обработчика событий клиента.
Возобновление других потоков во время вызова может быть предотвращено, указав флаг ClassType.INVOKE_SINGLE_THREADED в аргументе options; однако, нет защиты от или восстановления из описанных выше тупиков, поэтому это вариант следует использовать с большой осторожностью. Только указанный поток будет возобновлён (как описано выше для всех потоков). После завершения вызова в единственном потоке вызывающий поток будет приостановлен снова. Обратите внимание, что любые потоки, запущенные во время вызова в единственном потоке, не будут приостановлены, когда вызов завершится.
Если целевая виртуальная машина отключена во время вызова (например, через VirtualMachine.dispose()), вызов метода продолжается.
- Примечание API:
-
Виртуальные потоки обычно являются потоками пользовательского режима, управляемыми Java-средой выполнения, а не операционной системой. Таким образом, может быть больше случаев с виртуальными потоками, когда опция
ClassType.INVOKE_SINGLE_THREADEDможет вызвать тупик. Например, приостановка всех потоков в целевой виртуальной машине может приостановить потоки, которые поддерживают механизм таймера для виртуальных потоков, и таким образом методы, такие какThread.sleep(long)могут привести к тупику. - Параметры:
-
thread— поток, в котором нужно вызвать метод. -
method—Methodдля вызова. -
arguments— список аргументовValue, привязанных к вызываемому методу. Значения из списка присваиваются аргументам в порядке их появления в сигнатуре метода. -
options— целочисленный флаг параметров. - Возвращает:
Valueзеркало возвращаемого значения вызванного метода.- Выбрасывает:
-
IllegalArgumentException— если метод не является членом этого интерфейса, если размер списка аргументов не совпадает с количеством объявленных аргументов для метода или если метод не является статическим или является статической инициализацией. -
ClassNotLoadedException— если какой-либо тип аргумента ещё не загружен через соответствующий загрузчик классов. -
IncompatibleThreadStateException— если указанный поток не был приостановлен событием. -
InvocationException— если вызов метода привёл к исключению в целевой виртуальной машине. -
InvalidTypeException— если аргументы не соответствуют этому требованию — аргументы объекта должны быть совместимы с типом аргумента по присваиванию. Это подразумевает, что тип аргумента должен быть загружен через загрузчик класса содержащего класса. Примитивные аргументы должны быть либо совместимы с типом аргумента по присваиванию, либо преобразуемы в тип аргумента без потери информации. См. раздел 5.2 JLS для получения дополнительной информации о совместимости по присваиванию. -
VMCannotBeModifiedException— если виртуальная машина является только для чтения — см.VirtualMachine.canBeModified(). - С:
- 1.8
© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/jdk.jdi/com/sun/jdi/InterfaceType.html