Spec-Zone.ru › OpenJDK 25

Интерфейс 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)
Вызывает указанный статический Method в целевой виртуальной машине.
List<InterfaceType> subinterfaces()
Возвращает подготовленные в данный момент интерфейсы, непосредственно расширяющие этот интерфейс.
List<InterfaceType> 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

Методы, объявленные в интерфейсе 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, передать как массив того же компонентного типа либо указать аргумент компонентного типа с любым количеством последующих аргументов того же типа. Если аргумент опущен, передаётся массив компонентного типа нулевой длины. Компонентный тип может быть примитивным. Автоупаковка не поддерживается. Дополнительные сведения о совместимости по присваиванию см. в разделе 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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, в том числе концептуальные обзоры, определения терминов, способы решения проблем и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API