Spec-Zone.ru › OpenJDK 24

Интерфейс ClassType

Все суперинтерфейсы:
Accessible, Comparable<ReferenceType>, Mirror, ReferenceType, Type
public interface ClassType extends ReferenceType
Зеркало класса в целевой виртуальной машине. ClassType — это уточнение ReferenceType, которое применяется к истинным классам в смысле определения JLS (не к интерфейсу и не к типу массива). Любой ObjectReference, который отображает экземпляр такого класса, будет иметь ClassType в качестве своего типа.
С тех пор:
1.3
См. также:
  • ObjectReference

Краткое описание полей

Модификатор и тип Поле Описание
static final int INVOKE_SINGLE_THREADED
Выполнение вызова метода только с возобновленным вызывающим потоком

Краткое описание методов

Модификатор и тип Метод Описание
List<InterfaceType> allInterfaces()
Получение интерфейсов, непосредственно и косвенно реализуемых этим классом.
Method concreteMethodByName(String name, String signature)
Возвращает единственный не абстрактный Method, видимый из этого класса, имеющий заданное имя и сигнатуру.
List<InterfaceType> interfaces()
Получение интерфейсов, непосредственно реализуемых этим классом.
Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
Вызов указанного статического Method в целевой виртуальной машине.
boolean isEnum()
Определение, был ли этот класс объявлен как перечисление.
ObjectReference newInstance(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
Создаёт новый экземпляр этого типа, используя указанный конструктор Method в целевой виртуальной машине.
void setValue(Field field, Value value)
Присвоение значения статическому полю.
List<ClassType> subclasses()
Получение загруженных прямых подклассов этого класса.
ClassType superclass()
Получение суперкласса этого класса.

Методы, объявленные в интерфейсе 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

Подробное описание полей

INVOKE_SINGLE_THREADED

static final int INVOKE_SINGLE_THREADED
Выполнение вызова метода только с возобновленным вызывающим потоком
См. также:
  • Значения константных полей

Подробное описание методов

superclass

ClassType superclass()
Получение суперкласса этого класса.
Возвращает:
a ClassType что отражает суперкласс этого класса в целевой виртуальной машине. Если такого класса нет, возвращается null

interfaces

List<InterfaceType> interfaces()
Получение интерфейсов, непосредственно реализуемых этим классом. Включаются только интерфейсы, объявленные с ключевым словом "implements" в этом классе.
Возвращает:
список объектов InterfaceType, каждый из которых отображает прямой интерфейс этого ClassType в целевой виртуальной машине. Если таковых нет, возвращается список нулевой длины.
Выбрасывает:
ClassNotPreparedException - если этот класс ещё не подготовлен.

allInterfaces

List<InterfaceType> allInterfaces()
Получение интерфейсов, непосредственно и косвенно реализуемых этим классом. Интерфейсы, возвращаемые interfaces(), возвращаются также со всеми суперинтерфейсами.
Возвращает:
список объектов InterfaceType, каждый из которых отображает интерфейс этого ClassType в целевой виртуальной машине. Если таковых нет, возвращается список нулевой длины.
Выбрасывает:
ClassNotPreparedException - если этот класс ещё не подготовлен.

subclasses

List<ClassType> subclasses()
Получение загруженных прямых подклассов этого класса. Порядок в этом списке не гарантируется.
Возвращает:
список объектов ClassType, каждый из которых отображает загруженный подкласс этого класса в целевой виртуальной машине. Если таких классов нет, этот метод возвращает список нулевой длины.

isEnum

boolean isEnum()
Определение, был ли этот класс объявлен как перечисление.
Возвращает:
true если этот класс был объявлен как перечисление; false в противном случае.

setValue

void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException
Присвоение значения статическому полю. Field должен быть допустимым для этого ClassType; то есть он должен быть из класса отражаемого объекта или суперкласса этого класса. Поле не должно быть final.

Значения объектов должны быть совместимы с типом поля (это подразумевает, что тип поля должен быть загружен через загрузчик классов содержащего класса). Значения примитивных типов должны быть либо совместимы с типом поля, либо должны быть преобразуемы в тип поля без потери информации. См. раздел 5.2 JLS для получения дополнительной информации о совместимости присваивания.

Параметры:
field - поле для установки.
value - значение для присвоения.
Выбрасывает:
IllegalArgumentException - если поле не статическое, поле final или поле не существует в этом классе.
ClassNotLoadedException - если тип поля ещё не загружен через соответствующий загрузчик классов.
InvalidTypeException - если тип значения не соответствует объявленному типу поля.
VMCannotBeModifiedException - если VirtualMachine является только для чтения - см. VirtualMachine.canBeModified().

invokeMethod

Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Вызывает указанный статический Method в целевой виртуальной машине. Указанный метод может быть определен в этом классе или в суперклассе. Метод должен быть статическим, но не статическим инициализатором. Используйте newInstance(com.sun.jdi.ThreadReference, com.sun.jdi.Method, java.util.List<? extends com.sun.jdi.Value>, int) для создания нового объекта и выполнения его конструктора.

Вызов метода произойдёт в указанной нити. Вызов метода возможен только если указанная нить была приостановлена событием, произошедшим в этой нити. Вызов метода не поддерживается, когда целевая виртуальная машина приостановлена через 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 не должен выполняться из потока обработчика событий клиента.

Возобновление других потоков во время вызова можно предотвратить, установив флаг INVOKE_SINGLE_THREADED в аргументе options; однако, нет защиты от описанных выше тупиков или восстановления из них, поэтому этот вариант следует использовать с большой осторожностью. Возобновляется только указанный поток (как описано для всех потоков выше). По завершении однопоточного вызова вызывающий поток будет приостановлен ещё раз. Обратите внимание, что любые потоки, запущенные во время однопоточного вызова, не будут приостановлены при завершении вызова.

Если целевая виртуальная машина отключается во время вызова (например, через VirtualMachine.dispose()), вызов метода продолжается.

Примечание API:
Виртуальные потоки обычно являются потоками пользовательского режима, которые планируются Java-машиной выполнения, а не операционной системой. В связи с этим может быть больше случаев с виртуальными потоками, когда параметр INVOKE_SINGLE_THREADED может привести к тупику. Например, приостановка всех потоков в целевой виртуальной машине может приостановить потоки, которые поддерживают механизм таймера для виртуальных потоков, и таким образом такие методы, как Thread.sleep(long), могут привести к тупику.
Параметры:
thread - нить, в которой нужно вызвать метод.
method - Method для вызова.
arguments - список Value аргументов, связанных с вызываемым методом. Значения из списка присваиваются аргументам в порядке их появления в сигнатуре метода.
options - целое число с флагами опций.
Возвращает:
зеркало Value возвращаемого значения вызываемого метода.
Исключения:
IllegalArgumentException - если метод не является членом этого класса или суперкласса, если размер списка аргументов не соответствует числу объявленных аргументов для метода или если метод является инициализатором, конструктором или статическим инициализатором.
ClassNotLoadedException - если тип любого аргумента ещё не загружен через соответствующий загрузчик классов.
IncompatibleThreadStateException - если указанная нить не была приостановлена событием.
InvocationException - если вызов метода привёл к исключению в целевой виртуальной машине.
InvalidTypeException - если аргументы не соответствуют этому требованию -- аргументы-объекты должны быть совместимы с типом аргумента по присваиванию. Это подразумевает, что тип аргумента должен быть загружен через загрузчик классов содержащего класса. Примитивные аргументы должны быть либо совместимы с типом аргумента по присваиванию, либо должны быть приводимы к типу аргумента без потери информации. См. раздел 5.2 JLS для получения дополнительной информации о совместимости по присваиванию.
VMCannotBeModifiedException - если виртуальная машина является только для чтения — см. VirtualMachine.canBeModified().

newInstance

ObjectReference newInstance(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, она останется в приостановленном состоянии во время вызова. По умолчанию, когда вызов завершается, все нити в целевой виртуальной машине приостанавливаются, независимо от их состояния до вызова.

Возобновление других нитей во время вызова может быть предотвращено путём указания флага INVOKE_SINGLE_THREADED в options аргументе; однако, нет защиты от тупиковых ситуаций, описанных выше, или восстановления из них, поэтому этот параметр следует использовать с большой осторожностью. Возобновляется только указанная нить (как описано для всех нитей выше). По завершении вызова в единственной нити вызывающая нить снова приостанавливается. Обратите внимание, что любые нити, запущенные во время вызова в единственной нити, не будут приостановлены при завершении вызова.

Если целевая виртуальная машина отключена во время вызова (например, через VirtualMachine.dispose()), вызов метода продолжается.

Примечание API:
Виртуальные нити обычно являются нитями пользовательского режима, планируемыми Java-средой выполнения, а не операционной системой. Таким образом, могут быть больше случаев с виртуальными нитями, когда параметр INVOKE_SINGLE_THREADED может привести к тупиковой ситуации. Например, приостановка всех нитей в целевой виртуальной машине может приостановить нити, поддерживающие механизм таймера для виртуальных нитей, и, таким образом, методы, такие как Thread.sleep(long) могут привести к тупиковой ситуации.
Параметры:
thread - нить, в которой необходимо вызвать метод.
method - конструктор Method для вызова.
arguments - список Value аргументов, привязанных к вызываемому конструктору. Значения из списка присваиваются аргументам в порядке их появления в сигнатуре конструктора.
options - целые битовые флаги параметров.
Возвращает:
зеркало ObjectReference только что созданного объекта.
Исключения:
IllegalArgumentException - если метод не является членом этого класса, если размер списка аргументов не совпадает с числом объявленных аргументов для конструктора или если метод не является конструктором.
ClassNotLoadedException - если тип какого-либо аргумента ещё не загружен через соответствующий загрузчик класса.
IncompatibleThreadStateException - если указанная нить не была приостановлена событием.
InvocationException - если вызов метода привёл к исключению в целевой виртуальной машине.
InvalidTypeException - если аргументы не соответствуют этому требованию — аргументы-объекты должны быть совместимы по присваиванию с типом аргумента. Это подразумевает, что тип аргумента должен быть загружен через загрузчик класса, содержащего данный класс. Примитивные аргументы должны быть либо совместимы по присваиванию с типом аргумента, либо должны быть приводимы к типу аргумента без потери информации. См. раздел 5.2 JLS для получения дополнительной информации о совместимости по присваиванию.
VMCannotBeModifiedException - если виртуальная машина является только для чтения — см. VirtualMachine.canBeModified().

concreteMethodByName

Method concreteMethodByName(String name, String signature)
Возвращает единственный не абстрактный Method, видимый из этого класса, имеющий данное имя и сигнатуру. Смотрите ReferenceType.methodsByName(java.lang.String, java.lang.String) для получения информации о формате сигнатуры.

Возвращаемый метод (если не null) является компонентом ClassType.

Параметры:
name - имя искомого метода.
signature - сигнатура искомого метода
Возвращает:
метод Method, соответствующий данному имени и сигнатуре, или null, если соответствия нет.
Исключения:
ClassNotPreparedException - если методы ещё недоступны, потому что класс ещё не подготовлен.
См. также:
  • ReferenceType.visibleMethods()
  • ReferenceType.methodsByName(java.lang.String name)
  • ReferenceType.methodsByName(java.lang.String name, java.lang.String signature)

© 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/ClassType.html

Spec-Zone.ru

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