Класс ClassType

Все суперинтерфейсы:
Accessible, Comparable<ReferenceType>, Mirror, ReferenceType, Type
public interface ClassType
extends ReferenceType

Зеркало класса в целевой виртуальной машине. Класс ClassType является уточнением ReferenceType, применимым к истинным классам в смысле определения JLS (не интерфейсу, не типу массива). Любой ObjectReference, который отображает экземпляр такого класса, будет иметь тип ClassType.

С тех пор:
1.3
См. также:
ObjectReference

Поля

Модификатор и тип Поле Описание
static 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, массивом того же компонентного типа или аргументом компонентного типа, за которым следует любое количество других аргументов того же типа. Если аргумент пропущен, то передаётся массив длиной 0 компонентного типа. Компонентный тип может быть примитивным типом. Автоупаковка не поддерживается. См. раздел 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 - целочисленный флаг бита опций.
Возвращает:
a 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, 2020, 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/11/docs/api/jdk.jdi/com/sun/jdi/ClassType.html

Spec-Zone .ru
спецификации, руководства, описания, API