Spec-Zone.ru › OpenJDK 24

Интерфейс 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()
Получает интерфейсы, непосредственно расширяемые данным интерфейсом.

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

Spec-Zone.ru

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