Spec-Zone.ru › OpenJDK 21

Интерфейс 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()
Получить суперкласс этого класса.
Возвращает:
объект 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()) вызов метода продолжается.

Параметры:
thread - поток, в котором нужно вызвать.
method - Method для вызова.
arguments - список Value аргументов, связанных с вызываемым методом. Значения из списка присваиваются аргументам в порядке их появления в сигнатуре метода.
options - целочисленные флаги параметров.
Возвращает:
зеркало Value возвращаемого значения вызываемого метода.
Выбрасывает:
IllegalArgumentException - если метод не является членом этого класса или суперкласса, если размер списка аргументов не соответствует числу объявленных аргументов для метода или если метод является инициализатором, конструктором или статическим инициализатором.
ClassNotLoadedException - если тип любого аргумента еще не загружен через соответствующий загрузчик классов.
IncompatibleThreadStateException - если указанный поток не был приостановлен событием.
InvocationException - если вызов метода привёл к исключению в целевой виртуальной машине.
InvalidTypeException - Если типы аргументов не соответствуют этому требованию — Аргументы-объекты должны быть совместимы с типом аргумента. Это подразумевает, что тип аргумента должен быть загружен через загрузчик классов содержащего класса. Примитивные аргументы должны быть либо совместимы с типом аргумента, либо должны быть преобразуемы в тип аргумента без потери информации. См. раздел 5.2 JLS для получения дополнительной информации о совместимости присваивания.
VMCannotBeModifiedException - если VirtualMachine является только для чтения — см. 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()), вызов метода продолжается.

Parameters:
thread - поток, в котором необходимо выполнить вызов.
method - конструктор Method для вызова.
arguments - список Value аргументов, связанных с вызываемым конструктором. Значения из списка присваиваются аргументам в том порядке, в котором они появляются в сигнатуре конструктора.
options - целочисленный флаг битовых параметров.
Returns:
зеркало ObjectReference вновь созданного объекта.
Throws:
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.

Parameters:
name - имя метода для поиска.
signature - сигнатура метода для поиска
Returns:
метод Method, который соответствует заданному имени и сигнатуре, или null, если совпадений нет.
Throws:
ClassNotPreparedException - если методы ещё недоступны, потому что класс ещё не подготовлен.
See Also:
  • ReferenceType.visibleMethods()
  • ReferenceType.methodsByName(java.lang.String name)
  • ReferenceType.methodsByName(java.lang.String name, java.lang.String signature)

© 1993, 2023, 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/21/docs/api/jdk.jdi/com/sun/jdi/ClassType.html

Spec-Zone.ru

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