Интерфейс 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() |
Возвращает интерфейсы, непосредственно расширяемые этим интерфейсом. |
Методы, объявленные в интерфейсе Accessible
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers
Методы, объявленные в интерфейсе Comparable
compareTo
Методы, объявленные в интерфейсе Mirror
toString, virtualMachine
Методы, объявленные в интерфейсе 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. Чтобы избежать этого, перед вызовом invokeMethod следует отключить все EventRequests либо не вызывать 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 доступна только для чтения; см.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://docs.oracle.com/en/java/javase/25/docs/api/jdk.jdi/com/sun/jdi/InterfaceType.html