public final class MethodType extends Object implements Serializable
MethodHandle.invokeExact
和
MethodHandle.invoke
,在
invokedynamic
指令的执行。
该结构是伴随着任意数量的参数类型的返回类型。类型(原始的,void
,参考)是由类
物体的代表。(为了叙述方便,我们把void
好像是一型。事实上,它表示一个返回类型的情况下。
MethodType
所有实例是不可变的。如果两个实例比较相等,则是完全可以互换的。等式依赖于返回和参数类型的成对对应关系,而没有依赖于其他类型的对应关系。
这种类型只能通过工厂方法来创建。所有工厂方法可能缓存值,但不保证缓存。一些工厂方法是静态的,而其他的是虚拟的方法,修改前体的方法类型,例如,通过改变一个选定的参数。
有两种版本系统介绍了工厂方法操作上的参数类型组,使java数组和java列表可以用来与参数类型组的工作。查询方法parameterArray
和parameterList
也提供了数组和列表之间的选择。
MethodType
对象有时是从字节码指令如invokedynamic
,专门从类文件中的常量池指令相关联的类型说明符字符串。
像类和字符串一样,方法类型也可以直接表示在一个类文件的常量池中作为常量。一种类型可以由ldc
指令指的是一个合适的CONSTANT_MethodType
常量池入口装。入口是一种描述符字符串CONSTANT_Utf8
拼写。(全部细节的方法类型常数,见第4.4.8和5.4.3.5的java虚拟机的规范。)
当JVM实现从描述符字符串MethodType
,所有类的描述必须是可访问的,并将装。(但这类不需要初始化,是一个CONSTANT_Class
如此。)在任何时间发生在MethodType
对象导出可以加载。
Modifier and Type | Method and Description |
---|---|
MethodType |
appendParameterTypes(类<?>... ptypesToInsert)
查找或创建一个带有附加参数类型的方法类型。
|
MethodType |
appendParameterTypes(List<类<?>> ptypesToInsert)
查找或创建一个带有附加参数类型的方法类型。
|
MethodType |
changeParameterType(int num, 类<?> nptype)
查找或创建一个具有单个不同参数类型的方法类型。
|
MethodType |
changeReturnType(类<?> 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, 类<?>... ptypesToInsert)
查找或创建一个带有附加参数类型的方法类型。
|
MethodType |
insertParameterTypes(int num, List<类<?>> ptypesToInsert)
查找或创建一个带有附加参数类型的方法类型。
|
static MethodType |
methodType(类<?> rtype)
查找或创建给定组件的方法类型。
|
static MethodType |
methodType(类<?> rtype, 类<?> ptype0)
查找或创建给定组件的方法类型。
|
static MethodType |
methodType(类<?> rtype, 类<?>[] ptypes)
查找或创建给定方法类型的实例。
|
static MethodType |
methodType(类<?> rtype, 类<?> ptype0, 类<?>... ptypes)
查找或创建给定组件的方法类型。
|
static MethodType |
methodType(类<?> rtype, List<类<?>> ptypes)
查找或创建给定组件的方法类型。
|
static MethodType |
methodType(类<?> rtype, MethodType ptypes)
查找或创建给定组件的方法类型。
|
类<?>[] |
parameterArray()
介绍数组的参数类型(一个方便的方法)。
|
int |
parameterCount()
返回在该方法类型中的参数类型的数目。
|
List<类<?>> |
parameterList()
将参数类型介绍为列表(一种方便的方法)。
|
类<?> |
parameterType(int num)
返回在指定索引处的参数类型,在此方法类型中。
|
类<?> |
returnType()
返回此方法类型的返回类型。
|
String |
toMethodDescriptorString()
生产方法的字节码表示的类型描述符。
|
String |
toString()
返回的方法类型的字符串表示形式的
"(PT0,PT1...)RT" 。
|
MethodType |
unwrap()
将所有的包装类型转换为其相应的原始类型。
|
MethodType |
wrap()
将所有的原始类型转换为它们的相应的包装器类型。
|
public static MethodType methodType(类<?> rtype, 类<?>[] ptypes)
rtype
的返回类型
ptypes
的参数类型
NullPointerException
-如果
rtype
或
ptypes
或
ptypes
任何元素为null
IllegalArgumentException
-如果
ptypes
任何元素
void.class
public static MethodType methodType(类<?> rtype, List<类<?>> ptypes)
methodType
便利的方法。
rtype
的返回类型
ptypes
的参数类型
NullPointerException
-如果
rtype
或
ptypes
或
ptypes
任何元素为null
IllegalArgumentException
-如果
ptypes
任何元素
void.class
public static MethodType methodType(类<?> rtype, 类<?> ptype0, 类<?>... ptypes)
methodType
便利的方法。主要参数类型前面剩余的阵列。
rtype
的返回类型
ptype0
-第一个参数类型
ptypes
-其余的参数类型
NullPointerException
-如果
rtype
或
ptype0
或
ptypes
或
ptypes
任何元素为null
IllegalArgumentException
-如果
ptype0
或
ptypes
或任何元素
void.class
ptypes
public static MethodType methodType(类<?> rtype)
methodType
便利方法。该方法没有参数类型。
rtype
的返回类型
NullPointerException
-如果
rtype
是空的
public static MethodType methodType(类<?> rtype, 类<?> ptype0)
methodType
便利的方法。该方法具有单一参数类型。
rtype
的返回类型
ptype0
-参数类型
NullPointerException
-如果
rtype
或
ptype0
是空的
void.class
ptype0
IllegalArgumentException
public static MethodType methodType(类<?> rtype, MethodType ptypes)
methodType
便利的方法。该方法具有相同的参数类型和返回类型
ptypes
,指定。
rtype
的返回类型
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
为负数或大于255
genericMethodType(int, boolean)
public MethodType changeParameterType(int num, 类<?> nptype)
methodType
便利的方法。
num
-索引(从零开始)的参数类型改变
nptype
-一个新的参数类型来取代旧的一
IndexOutOfBoundsException
-如果
num
不是有效的指标为
parameterArray()
void.class
nptype
IllegalArgumentException
NullPointerException
-如果
nptype
是空的
public MethodType insertParameterTypes(int num, 类<?>... ptypesToInsert)
methodType
便利的方法。
num
-位置(零基础)的插入参数类型(S)
ptypesToInsert
-零个或多个新的参数类型插入参数列表
IndexOutOfBoundsException
-如果
num
为负数或大于
parameterCount()
IllegalArgumentException
-如果
ptypesToInsert
任何元素
void.class
或者产生的方法将会有超过255的参数槽
NullPointerException
-如果
ptypesToInsert
或其任何元素是空的
public MethodType appendParameterTypes(类<?>... ptypesToInsert)
methodType
便利的方法。
ptypesToInsert
-零个或多个新的参数的类型参数列表结束后插入
IllegalArgumentException
-如果
ptypesToInsert
任何元素
void.class
或者产生的方法将会有超过255的参数槽
NullPointerException
-如果
ptypesToInsert
或其任何元素是空的
public MethodType insertParameterTypes(int num, List<类<?>> ptypesToInsert)
methodType
便利的方法。
num
-位置(零基础)的插入参数类型(S)
ptypesToInsert
-零个或多个新的参数类型插入参数列表
IndexOutOfBoundsException
-如果
num
为负数或大于
parameterCount()
IllegalArgumentException
-如果
ptypesToInsert
任何元素
void.class
或者产生的方法将会有超过255的参数槽
NullPointerException
-如果
ptypesToInsert
或其任何元素是空的
public MethodType appendParameterTypes(List<类<?>> 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(类<?> nrtype)
methodType
便利的方法。
nrtype
-返回参数类型来取代旧的一
NullPointerException
-如果
nrtype
是空的
public boolean hasPrimitives()
void
计数作为一个原始的。
public boolean hasWrappers()
Integer
。引用类型
java.lang.Void
计数作为包装,如果它是一个返回类型。
public MethodType erase()
public MethodType generic()
public MethodType wrap()
methodType
便利方法。所有引用类型(包括包装类型)将保持不变。一个
void
返回类型改为型
java.lang.Void
。表达
type.wrap().erase()
产生相同的值作为
type.generic()
。
public MethodType unwrap()
public 类<?> parameterType(int num)
num
-索引(从零开始)所需的参数类型
IndexOutOfBoundsException
-如果
num
不是有效的指标为
parameterArray()
public int parameterCount()
public 类<?> returnType()
public 类<?>[] parameterArray()
public boolean equals(Object x)
equals
方法重写,继承类
Object
x
对象比较
true
obj参数相同;
false
否则。
Object.equals(Object)
public int hashCode()
hashCode
方法重写,继承类
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
便利方法。任何类或接口的名称嵌入在描述符字符串会在给定的装载机称
ClassLoader.loadClass(java.lang.String)
解决(或如果它是空的,在系统类装载器)。
请注意,它是可能遇到的方法类型,不能通过这种方法构建的,因为它们的组件类型不是从一个普通的类装载器所有可访问的。
该方法包括,必须生成字节码处理方法处理和invokedynamic
应用效益。
descriptor
-字节码级别类型说明符字符串“(T)”
loader
的类装载器中查找类型
NullPointerException
-如果字符串是空的
IllegalArgumentException
-如果字符串形成不好
TypeNotPresentException
如果命名类型不能被发现
public String toMethodDescriptorString()
请注意,这不是一个严格的反fromMethodDescriptorString
。两个不同的类共享一个共同的名称,但有不同的类装载器将出现相同的时,在描述符的字符串。
该方法包括,必须生成字节码处理方法处理和invokedynamic
应用效益。fromMethodDescriptorString
,因为后者需要一个合适的类装载器参数。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.