Интерфейс InterfaceType
- Все суперинтерфейсы:
Accessible, Comparable<ReferenceType>, Mirror, ReferenceType, Type
public interface InterfaceType extends ReferenceType
ReferenceType, применимое к настоящим интерфейсам в смысле определения JLS (не класс и не тип массива). Тип интерфейса никогда не возвращается методом ObjectReference.referenceType(), однако он может находиться в списке реализуемых интерфейсов для ClassType, возвращаемого этим методом.- Начиная с версии:
- 1.3
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
List |
implementors() |
Получает подготовленные в данный момент классы, непосредственно реализующие этот интерфейс. |
default Value |
invokeMethod |
Вызывает указанный статический Method в целевой виртуальной машине. |
List |
subinterfaces() |
Получает подготовленные в данный момент интерфейсы, непосредственно расширяющие этот интерфейс. |
List |
superinterfaces() |
Получает интерфейсы, непосредственно расширяемые этим интерфейсом. |
Методы, объявленные в интерфейсе Accessible
isPackagePrivate, isPrivate, isProtected, isPublic, modifiers | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
isPackagePrivate() |
Определяет, отражает ли этот объект элемент с доступом на уровне пакета. |
boolean |
isPrivate() |
Определяет, отражает ли этот объект закрытый элемент. |
boolean |
isProtected() |
Определяет, отражает ли этот объект защищённый элемент. |
boolean |
isPublic() |
Определяет, отражает ли этот объект общедоступный элемент. |
int |
modifiers() |
Возвращает модификаторы языка программирования Java, закодированные целым числом. |
Методы, объявленные в интерфейсе Comparable
compareTo | Модификатор и тип | Метод | Описание |
|---|---|---|
int |
compareTo |
Сравнивает этот объект с указанным объектом, определяя порядок. |
Методы, объявленные в интерфейсе Mirror
toString, virtualMachine | Модификатор и тип | Метод | Описание |
|---|---|---|
String |
toString() |
Возвращает строку с описанием этого отражения |
VirtualMachine |
virtualMachine() |
Получает VirtualMachine, которому принадлежит это отражение. |
Методы, объявленные в интерфейсе 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 | Модификатор и тип | Метод | Описание |
|---|---|---|
List |
allFields() |
Возвращает список, содержащий каждый Field, объявленный в этом типе, его суперклассах, реализованных интерфейсах и/или суперинтерфейсах. |
List |
allLineLocations() |
Возвращает список, содержащий объект Location для каждой исполняемой строки исходного кода в этом ссылочном типе. |
List |
allLineLocations |
Возвращает список, содержащий объект Location для каждой исполняемой строки исходного кода в этом ссылочном типе. |
List |
allMethods() |
Возвращает список, содержащий каждый Method, объявленный в этом типе, его суперклассах, реализованных интерфейсах и/или суперинтерфейсах. |
List |
availableStrata() |
Возвращает доступные пласты для этого ссылочного типа. |
ClassLoaderReference |
classLoader() |
Получает объект загрузчика классов, загрузившего класс, соответствующий этому типу. |
ClassObjectReference |
classObject() |
Возвращает объект класса, соответствующий этому типу в целевой виртуальной машине. |
byte[] |
constantPool() |
Возвращает необработанные байты пула констант в формате элемента constant_pool из формата файлов классов, описанного в спецификации виртуальной машины Java. |
int |
constantPoolCount() |
Возвращает количество записей в пуле констант плюс один. |
String |
defaultStratum() |
Возвращает пласт по умолчанию для этого ссылочного типа. |
boolean |
equals |
Сравнивает указанный объект с этим ReferenceType на равенство. |
boolean |
failedToInitialize() |
Определяет, завершилась ли неудачей инициализация этого класса. |
Field |
fieldByName |
Находит видимое поле Field с указанным однозначным именем. |
List |
fields() |
Возвращает список, содержащий каждое поле Field, объявленное в этом типе. |
String |
genericSignature() |
Получает обобщённую сигнатуру этого типа, если она имеется. |
Value |
getValue |
|
Map |
getValues |
|
int |
hashCode() |
Возвращает значение хеш-кода для этого ObjectReference. |
List |
instances |
Возвращает экземпляры этого ReferenceType. |
boolean |
isAbstract() |
Определяет, был ли этот тип объявлен абстрактным. |
boolean |
isFinal() |
Определяет, был ли этот тип объявлен окончательным. |
boolean |
isInitialized() |
Определяет, был ли инициализирован этот тип. |
boolean |
isPrepared() |
Определяет, был ли подготовлен этот тип. |
boolean |
isStatic() |
Определяет, был ли этот тип объявлен статическим. |
boolean |
isVerified() |
Определяет, был ли проверен этот тип. |
List |
locationsOfLine |
Возвращает список, содержащий все объекты Location, соответствующие указанному номеру строки. |
List |
locationsOfLine |
Возвращает список, содержащий все объекты Location, соответствующие указанному номеру строки. |
int |
majorVersion() |
Возвращает старший номер версии класса, определённый в формате файлов классов спецификации виртуальной машины Java. |
List |
methods() |
Возвращает список, содержащий каждый метод Method, объявленный непосредственно в этом типе. |
List |
methodsByName |
Возвращает список, содержащий каждый видимый метод Method с указанным именем. |
List |
methodsByName |
Возвращает список, содержащий каждый видимый метод Method с указанными именем и сигнатурой. |
int |
minorVersion() |
Возвращает младший номер версии класса, определённый в формате файлов классов спецификации виртуальной машины Java. |
default ModuleReference |
module() |
Получает объект модуля, содержащего класс, соответствующий этому типу. |
String |
name() |
Возвращает имя этого объекта ReferenceType. |
List |
nestedTypes() |
Возвращает список, содержащий объекты ReferenceType, объявленные внутри этого типа и загруженные в данный момент в виртуальную машину. |
String |
sourceDebugExtension() |
Получает расширение отладочной информации исходного кода этого типа. |
String |
sourceName() |
Получает идентифицирующее имя исходного кода, соответствующего объявлению этого типа. |
List |
sourceNames |
Получает идентифицирующие имена всех исходных текстов, соответствующих объявлению этого типа. |
List |
sourcePaths |
Получает пути к исходному коду, соответствующему объявлению этого типа. |
List |
visibleFields() |
Возвращает список, содержащий каждое не скрытое и однозначное поле Field этого типа. |
List |
visibleMethods() |
Возвращает список, содержащий каждый метод Method, объявленный в этом типе или унаследованный им. |
Подробное описание методов
superinterfaces
List<InterfaceType> superinterfaces()
- Возвращает:
- список объектов
InterfaceType, каждый из которых отражает интерфейс, расширяемый этим интерфейсом. Если таких интерфейсов нет, возвращает список нулевой длины. - Выбрасывает:
-
ClassNotPreparedException— если этот класс ещё не был подготовлен.
subinterfaces
List<InterfaceType> subinterfaces()
- Возвращает:
- список объектов
InterfaceType, каждый из которых отражает интерфейс, расширяющий этот интерфейс. Если таких интерфейсов нет, возвращает список нулевой длины.
implementors
List<ClassType> implementors()
- Возвращает:
- список объектов
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 будет некому. Чтобы избежать этого, перед вызовом invokeMethod следует отключить все EventRequests либо не вызывать 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.