Интерфейс ClassType
- Все суперинтерфейсы:
-
Accessible,Comparable<ReferenceType>,Mirror,ReferenceType,Type
public interface ClassType extends ReferenceType
ReferenceType, применимое к настоящим классам в смысле определения JLS (не интерфейс, не тип массива). Любой ObjectReference, отражающий экземпляр такого класса, будет иметь ClassType в качестве своего типа.- С момента:
- 1.3
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
INVOKE_SINGLE_THREADED |
Выполнить вызов метода только с возобновленным вызывающим потоком |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
List<InterfaceType> |
allInterfaces() |
Получает интерфейсы, прямо и косвенно реализуемые этим классом. |
Method |
concreteMethodByName |
Возвращает единственный неабстрактный Method, видимый из этого класса, имеющий заданное имя и сигнатуру. |
List<InterfaceType> |
interfaces() |
Получает интерфейсы, непосредственно реализуемые этим классом. |
Value |
invokeMethod |
Вызывает указанный статический Method в целевой виртуальной машине. |
boolean |
isEnum() |
Определяет, был ли этот класс объявлен как перечисление. |
ObjectReference |
newInstance |
Создаёт новый экземпляр этого типа, используя указанный конструктор Method в целевой виртуальной машине. |
void |
setValue |
Присваивает значение статическому полю. |
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
Подробное описание полей
INVOKE_SINGLE_THREADED
static final int INVOKE_SINGLE_THREADED
- См. также:
Подробное описание методов
superclass
ClassType superclass()
- Возвращает:
- a
ClassType, отражающий суперкласс этого класса в целевой виртуальной машине. Если такого класса не существует, возвращает null
interfaces
List<InterfaceType> interfaces()
- Возвращает:
- список объектов
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. Чтобы этого избежать, все запросы событий должны быть отключены перед выполнением 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, массивом того же компонентного типа или аргументом компонентного типа, за которым следует любое количество других аргументов того же типа. Если аргумент пропущен, то передается массив нулевой длины компонентного типа. Компонентный тип может быть примитивным типом. Автоупаковка не поддерживается. Дополнительную информацию о совместимости по присваиванию см. в разделе 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:
© 1993, 2021, 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/17/docs/api/jdk.jdi/com/sun/jdi/ClassType.html