Spec-Zone .ru
спецификации, руководства, описания, API
|
public final class MethodType extends Object implements Serializable
MethodHandle.invokeExact
и MethodHandle.invoke
, и во время выполнения invokedynamic
инструкции. Структура является типом возврата, сопровождаемым любым числом типов параметра. Типы (примитивный, void
, и ссылка), представляются Class
объекты. (Для простоты выставки мы обрабатываем void
как будто это был тип. Фактически, это обозначает отсутствие типа возврата.)
Все экземпляры MethodType
являются неизменными. Два экземпляра являются абсолютно взаимозаменяемыми, если они сравниваются равный. Равенство зависит от попарной корреспонденции возврата и типов параметра и ни на чем ином.
Этот тип может быть создан только методами фабрики. Все методы фабрики могут кэшировать значения, хотя кэширование не гарантируется. Некоторые методы фабрики статичны, в то время как другие являются виртуальными методами, которые изменяют типы метода предшественника, например, изменяя выбранный параметр.
Методики фабрики, которые работают на группах типов параметра, систематически представляются в двух версиях, так, чтобы и массивы Java и списки Java могли использоваться, чтобы работать с группами типов параметра. Методы запроса parameterArray
и parameterList
также обеспечьте выбор между массивами и списками.
MethodType
объекты иногда получаются из инструкций байт-кода такой как invokedynamic
, определенно от строк дескриптора типа, связанных с инструкциями в постоянном пуле файла class.
Как классы и строки, типы метода могут также быть представлены непосредственно в постоянном пуле файла class как константы. Тип метода может быть загружен ldc
инструкция, которая обращается к подходящему CONSTANT_MethodType
постоянная запись пула. Запись обращается к a CONSTANT_Utf8
написание для строки дескриптора. Для получения дополнительной информации см. сводку пакета.
Когда JVM осуществляет a MethodType
от строки дескриптора все классы, названные в дескрипторе, должны быть доступными, и будут загружены. (Но классы не должны быть инициализированы, как имеет место с a CONSTANT_Class
.) Эта загрузка может произойти в любое время перед MethodType
объект сначала получается.
Модификатор и Тип | Метод и Описание |
---|---|
MethodType |
appendParameterTypes(Class<?>... ptypesToInsert)
Находит или создает тип метода с дополнительными типами параметра.
|
MethodType |
appendParameterTypes(List<Class<?>> ptypesToInsert)
Находит или создает тип метода с дополнительными типами параметра.
|
MethodType |
changeParameterType(int num, Class<?> nptype)
Находит или создает тип метода с единственным различным типом параметра.
|
MethodType |
changeReturnType(Class<?> nrtype)
Находит или создает тип метода с различным типом возврата.
|
MethodType |
dropParameterTypes(int start, int end)
Находит или создает тип метода с некоторыми опущенными типами параметра.
|
boolean |
equals(Object x)
Сравнивает указанный объект с этим типом для равенства.
|
MethodType |
erase()
Стирает все ссылочные типы к
Object . |
static MethodType |
fromMethodDescriptorString(String descriptor, ClassLoader loader)
Находит или создает экземпляр типа метода, учитывая написание его дескриптора байт-кода.
|
MethodType |
generic()
Преобразовывает все типы, и ссылка и примитивный, к
Object . |
static MethodType |
genericMethodType(int objectArgCount)
Находит или создает тип метода, компоненты которого - все
Object . |
static MethodType |
genericMethodType(int objectArgCount, boolean finalArray)
Находит или создает тип метода, компоненты которого
Object с дополнительным запаздыванием Object[] массив. |
int |
hashCode()
Возвращает значение хэш-кода для этого типа метода.
|
boolean |
hasPrimitives()
Отчеты, если этот тип содержит примитивный параметр или возвращаемое значение.
|
boolean |
hasWrappers()
Отчеты, если этот тип содержит значение аргумента обертки или возвращаемое значение.
|
MethodType |
insertParameterTypes(int num, Class<?>... ptypesToInsert)
Находит или создает тип метода с дополнительными типами параметра.
|
MethodType |
insertParameterTypes(int num, List<Class<?>> ptypesToInsert)
Находит или создает тип метода с дополнительными типами параметра.
|
static MethodType |
methodType(Class<?> rtype)
Находит или создает тип метода с данными компонентами.
|
static MethodType |
methodType(Class<?> rtype, Class<?> ptype0)
Находит или создает тип метода с данными компонентами.
|
static MethodType |
methodType(Class<?> rtype, Class<?>[] ptypes)
Находит или создает экземпляр данного типа метода.
|
static MethodType |
methodType(Class<?> rtype, Class<?> ptype0, Class<?>... ptypes)
Находит или создает тип метода с данными компонентами.
|
static MethodType |
methodType(Class<?> rtype, List<Class<?>> ptypes)
Находит или создает тип метода с данными компонентами.
|
static MethodType |
methodType(Class<?> rtype, MethodType ptypes)
Находит или создает тип метода с данными компонентами.
|
Class<?>[] |
parameterArray()
Представляет типы параметра как массив (метод удобства).
|
int |
parameterCount()
Возвращается число параметра вводит этот тип метода.
|
List<Class<?>> |
parameterList()
Представляет типы параметра как список (метод удобства).
|
Class<?> |
parameterType(int num)
Возвращается тип параметра в указанном индексируют, в пределах этого типа метода.
|
Class<?> |
returnType()
Возвращает тип возврата этого типа метода.
|
Строка |
toMethodDescriptorString()
Производит представление дескриптора байт-кода типа метода.
|
Строка |
toString()
Возвращает строковое представление типа метода, формы
"(PT0,PT1...)RT" . |
MethodType |
unwrap()
Преобразовывает все типы обертки в их соответствующие типы примитивов.
|
MethodType |
wrap()
Преобразовывает все типы примитивов в их соответствующие типы обертки.
|
public static MethodType methodType(Class<?> rtype, Class<?>[] ptypes)
rtype
- тип возвратаptypes
- типы параметраNullPointerException
- если rtype
или ptypes
или любой элемент ptypes
нульIllegalArgumentException
- если любой элемент ptypes
void.class
public static MethodType methodType(Class<?> rtype, List<Class<?>> ptypes)
methodType
.NullPointerException
- если rtype
или ptypes
или любой элемент ptypes
нульIllegalArgumentException
- если любой элемент ptypes
void.class
public static MethodType methodType(Class<?> rtype, Class<?> ptype0, Class<?>... ptypes)
methodType
. Ведущий тип параметра предварительно ожидается остающемуся массиву.NullPointerException
- если rtype
или ptype0
или ptypes
или любой элемент ptypes
нульIllegalArgumentException
- если ptype0
или ptypes
или любой элемент ptypes
void.class
public static MethodType methodType(Class<?> rtype)
methodType
. У получающегося метода нет никаких типов параметра.NullPointerException
- если rtype
нульpublic static MethodType methodType(Class<?> rtype, Class<?> ptype0)
methodType
. У получающегося метода есть единственный данный тип параметра.NullPointerException
- если rtype
или ptype0
нульIllegalArgumentException
- если ptype0
void.class
public static MethodType methodType(Class<?> rtype, MethodType ptypes)
methodType
. У получающегося метода есть те же самые типы параметра как ptypes
, и указанный тип возврата.NullPointerException
- если rtype
или ptypes
нульpublic static MethodType genericMethodType(int objectArgCount, boolean finalArray)
Object
с дополнительным запаздыванием Object[]
массив. Метод удобства для methodType
. Все параметры и тип возврата будут Object
, кроме заключительного параметра массива если таковые вообще имеются, который будет Object[]
.objectArgCount
- число параметров (исключая заключительный параметр массива, если любой)finalArray
- будет ли запаздывающий параметр массива типа Object[]
IllegalArgumentException
- если objectArgCount
отрицательно или больше чем 255 (или 254, если finalArray
истина),genericMethodType(int)
public static MethodType genericMethodType(int objectArgCount)
Object
. Метод удобства для methodType
. Все параметры и тип возврата будут Объектом.objectArgCount
- число параметровIllegalArgumentException
- если objectArgCount
отрицательно или больше чем 255genericMethodType(int, boolean)
public MethodType changeParameterType(int num, Class<?> nptype)
methodType
.num
- индексирование (основанного на нуле) из параметра вводит, чтобы изменитьсяnptype
- новый параметр вводит, чтобы заменить старыйIndexOutOfBoundsException
- если num
не допустимое, индексируют в parameterArray()
IllegalArgumentException
- если nptype
void.class
NullPointerException
- если nptype
нульpublic MethodType insertParameterTypes(int num, Class<?>... ptypesToInsert)
methodType
.num
- позиция (основанная на нуле) из вставленного типа (ов) параметраptypesToInsert
- нулевой или более новый параметр вводит, чтобы вставить в список параметровIndexOutOfBoundsException
- если num
отрицательно или больше чем parameterCount()
IllegalArgumentException
- если любой элемент ptypesToInsert
void.class
или если бы у получающегося типа метода было бы больше чем 255 слотов параметраNullPointerException
- если ptypesToInsert
или любой из его элементов является нулемpublic MethodType appendParameterTypes(Class<?>... ptypesToInsert)
methodType
.ptypesToInsert
- нулевой или более новый параметр вводит, чтобы вставить после конца списка параметровIllegalArgumentException
- если любой элемент ptypesToInsert
void.class
или если бы у получающегося типа метода было бы больше чем 255 слотов параметраNullPointerException
- если ptypesToInsert
или любой из его элементов является нулемpublic MethodType insertParameterTypes(int num, List<Class<?>> ptypesToInsert)
methodType
.num
- позиция (основанная на нуле) из вставленного типа (ов) параметраptypesToInsert
- нулевой или более новый параметр вводит, чтобы вставить в список параметровIndexOutOfBoundsException
- если num
отрицательно или больше чем parameterCount()
IllegalArgumentException
- если любой элемент ptypesToInsert
void.class
или если бы у получающегося типа метода было бы больше чем 255 слотов параметраNullPointerException
- если ptypesToInsert
или любой из его элементов является нулемpublic MethodType appendParameterTypes(List<Class<?>> ptypesToInsert)
methodType
.ptypesToInsert
- нулевой или более новый параметр вводит, чтобы вставить после конца списка параметровIllegalArgumentException
- если любой элемент ptypesToInsert
void.class
или если бы у получающегося типа метода было бы больше чем 255 слотов параметраNullPointerException
- если ptypesToInsert
или любой из его элементов является нулемpublic MethodType dropParameterTypes(int start, int end)
methodType
.start
- индексирование (основанного на нуле) из первого параметра вводит, чтобы удалитьend
- индексирование (больше чем start
) из первого типа параметра после, чтобы не удалитьIndexOutOfBoundsException
- если start
отрицательно или больше чем parameterCount()
или если end
отрицательно или больше чем parameterCount()
или если start
больше чем end
public MethodType changeReturnType(Class<?> nrtype)
methodType
.nrtype
- тип возвращаемого параметра, чтобы заменить старыйNullPointerException
- если nrtype
нульpublic boolean hasPrimitives()
void
количества как примитив.public boolean hasWrappers()
Integer
. Ссылочный тип java.lang.Void
количества как обертка, если это происходит как тип возврата.public MethodType erase()
Object
. Метод удобства для methodType
. Все типы примитивов (включая void
) останется неизменным.public MethodType generic()
Object
. Метод удобства для genericMethodType
. Выражение type.wrap().erase()
производит то же самое значение как type.generic()
.public MethodType wrap()
methodType
. Все ссылочные типы (включая типы обертки) останутся неизменными. A void
возвратитесь тип изменяется на тип java.lang.Void
. Выражение type.wrap().erase()
производит то же самое значение как type.generic()
.public MethodType unwrap()
methodType
. Все типы примитивов (включая void
) останется неизменным. Тип возврата java.lang.Void
изменяется на void
.public Class<?> parameterType(int num)
num
- индексирование (основанного на нуле) из требуемого типа параметраIndexOutOfBoundsException
- если num
не допустимое, индексируют в parameterArray()
public int parameterCount()
public Class<?> returnType()
public List<Class<?>> parameterList()
public Class<?>[] parameterArray()
public boolean equals(Object x)
equals
в class Object
x
- объект сравнитьсяtrue
если этот объект является тем же самым как obj параметром; false
иначе.Object.equals(Object)
public int hashCode()
hashCode
в class Object
Object.hashCode()
, equals(Object)
, List.hashCode()
public String toString()
"(PT0,PT1...)RT"
. Строковое представление типа метода является включенной круглой скобкой, список разделенных запятой значений имен типов, сопровождаемых сразу типом возврата. Каждый тип представляется simple name
.
public static MethodType fromMethodDescriptorString(String descriptor, ClassLoader loader) throws IllegalArgumentException, TypeNotPresentException
methodType
. Любой class или имя интерфейса, встроенное в строку дескриптора, будут разрешены, вызывая ClassLoader.loadClass(java.lang.String)
на данном загрузчике (или если это - нуль на системе загрузчик class). Отметьте, что возможно встретиться с типами метода, которые не могут быть созданы этим методом, потому что их компонентные типы не все достижимы от общего загрузчика class.
Этот метод включается для benfit приложений, которые должны генерировать байт-коды, которые обрабатывают дескрипторы метода и invokedynamic
.
descriptor
- дескриптор типа на уровне байт-кода представляет в виде строки" (T...) T"loader
- загрузчик class, в котором можно искать типыNullPointerException
- если строка является нулемIllegalArgumentException
- если строка не правильно построенаTypeNotPresentException
- если именованный тип не может быть найденpublic String toMethodDescriptorString()
Отметьте, что это не строгая инверсия fromMethodDescriptorString
. Два отличных класса, которые совместно используют общее название, но имеют различные загрузчики class, будут казаться идентичными когда просматривающийся в пределах строк дескриптора.
Этот метод включается для benfit приложений, которые должны генерировать байт-коды, которые обрабатывают дескрипторы метода и invokedynamic
. fromMethodDescriptorString
, потому что последний требует подходящего параметра загрузчика class.
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92