java.lang.Object java.lang.reflect.AccessibleObject java.lang.reflect.Method
public final class Method
Method
提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。所反映的方法可能是类方法或实例方法(包括抽象方法)。
Method
允许在匹配要调用的实参与底层方法的形参时进行扩展转换;但如果要进行收缩转换,则会抛出 IllegalArgumentException
。
Member
,
Class
,
Class.getMethods()
,
Class.getMethod(String, Class[])
,
Class.getDeclaredMethods()
,
Class.getDeclaredMethod(String, Class[])
字段摘要 |
---|
从接口 java.lang.reflect.Member 继承的字段 |
---|
DECLARED, PUBLIC |
方法摘要 | ||
---|---|---|
boolean |
equals(Object obj) 将此 Method 与指定对象进行比较。 |
|
|
getAnnotation(Class<T> annotationClass) 如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。 |
|
Annotation[] |
getDeclaredAnnotations() 返回直接存在于此元素上的所有注释。 |
|
Class<?> |
getDeclaringClass() 返回表示声明由此 Method 对象表示的方法的类或接口的 Class 对象。 |
|
Object |
getDefaultValue() 返回由此 Method 实例表示的注释成员的默认值。 |
|
Class<?>[] |
getExceptionTypes() 返回 Class 对象的数组,这些对象描述了声明将此 Method 对象表示的底层方法抛出的异常类型。 |
|
Type[] |
getGenericExceptionTypes() 返回 Type 对象数组,这些对象描述了声明由此 Method 对象抛出的异常。 |
|
Type[] |
getGenericParameterTypes() 按照声明顺序返回 Type 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型的。 |
|
Type |
getGenericReturnType() 返回表示由此 Method 对象所表示方法的正式返回类型的 Type 对象。 |
|
int |
getModifiers() 以整数形式返回此 Method 对象所表示方法的 Java 语言修饰符。 |
|
String |
getName() 以 String 形式返回此 Method 对象表示的方法名称。 |
|
Annotation[][] |
getParameterAnnotations() 返回表示按照声明顺序对此 Method 对象所表示方法的形参进行注释的那个数组的数组。 |
|
Class<?>[] |
getParameterTypes() 按照声明顺序返回 Class 对象的数组,这些对象描述了此 Method 对象所表示的方法的形参类型。 |
|
Class<?> |
getReturnType() 返回一个 Class 对象,该对象描述了此 Method 对象所表示的方法的正式返回类型。 |
|
TypeVariable<Method>[] |
getTypeParameters() 返回 TypeVariable 对象的数组,这些对象描述了由 GenericDeclaration 对象表示的一般声明按声明顺序来声明的类型变量。 |
|
int |
hashCode() 返回此 Method 的哈希码。 |
|
Object |
invoke(Object obj, Object... args) 对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。 |
|
boolean |
isBridge() 如果此方法是 bridge 方法,则返回 true;否则,返回 false。 |
|
boolean |
isSynthetic() 如果此方法为复合方法,则返回 true;否则,返回 false。 |
|
boolean |
isVarArgs() 如果将此方法声明为带有可变数量的参数,则返回 true;否则,返回 false。 |
|
String |
toGenericString() 返回描述此 Method 的字符串,包括类型参数。 |
|
String |
toString() 返回描述此 Method 的字符串。 |
从类 java.lang.reflect.AccessibleObject 继承的方法 |
---|
getAnnotations, isAccessible, isAnnotationPresent, setAccessible, setAccessible |
从类 java.lang.Object 继承的方法 |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
方法详细信息 |
---|
public Class<?> getDeclaringClass()
Method
对象表示的方法的类或接口的
Class
对象。
Member
中的
getDeclaringClass
public String getName()
public int getModifiers()
Method
对象所表示方法的 Java 语言修饰符。应该使用
Modifier
类对修饰符进行解码。
Member
中的
getModifiers
Modifier
public TypeVariable<Method>[] getTypeParameters()
GenericDeclaration
中的
getTypeParameters
GenericSignatureFormatError
- 如果此一般声明的一般签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式
public Class<?> getReturnType()
Class
对象,该对象描述了此
Method
对象所表示的方法的正式返回类型。
public Type getGenericReturnType()
如果返回类型是参数化类型,则返回的 Type 对象必须实际反映源代码中所用参数的实际类型。
如果返回类型是类型变量或参数化类型,则创建它。否则将解析它。
GenericSignatureFormatError
- 如果一般方法签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式
TypeNotPresentException
- 如果底层方法的返回类型引用不存在的类型声明
MalformedParameterizedTypeException
- 如果底层方法的返回类型引用无论如何都无法实例化的参数化类型
public Class<?>[] getParameterTypes()
Class
对象的数组,这些对象描述了此
Method
对象所表示的方法的形参类型。如果底层方法不带参数,则返回长度为 0 的数组。
public Type[] getGenericParameterTypes()
如果形参类型是参数化类型,则为其返回的 Type 对象必须实际反映源代码中使用的实际类型参数。
如果形参类型是类型变量或参数化类型,则创建它。否则将解析它。
GenericSignatureFormatError
- 如果一般方法签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式
TypeNotPresentException
- 如果底层方法的所有参数类型都引用不存在的类型声明
MalformedParameterizedTypeException
- 如果所有底层方法的参数类型引用无论如何都无法实例化的参数化类型
public Class<?>[] getExceptionTypes()
Class
对象的数组,这些对象描述了声明将此
Method
对象表示的底层方法抛出的异常类型。如果此方法没有在其
throws
子句中声明异常,则返回长度为 0 的数组。
public Type[] getGenericExceptionTypes()
如果异常类型是参数化的类型,那么为它返回的 Type 对象必须实际反映源代码中所用参数的实际类型。
如果异常类型是类型变量或参数化类型,则创建它。否则将解析它。
GenericSignatureFormatError
- 如果一般方法签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式
TypeNotPresentException
- 如果底层方法的
throws 子句引用不存在的类型声明
MalformedParameterizedTypeException
- 如果底层方法的
throws 子句引用无论如何都无法实例化的参数化类型
public boolean equals(Object obj)
Method
与指定对象进行比较。如果对象相同,则返回 true。如果它们由相同的类声明,具有相同的名称、形参类型和返回类型,则两个
Method
相同。
obj
- 要与之比较的引用对象。
true
;否则返回
false
。
Object.hashCode()
,
Hashtable
public int hashCode()
Method
的哈希码。哈希码按底层方法的声明类名称和方法名称的哈希码的异或计算。
Object.equals(java.lang.Object)
,
Hashtable
public String toString()
Method
的字符串。该字符串被格式化为方法访问修饰符(如果有),后面依次跟着方法返回类型、空格、声明方法的类、句点、方法名、括号以及由逗号分隔的方法的形参类型列表。如果方法抛出检查异常,则参数列表后跟着空格、单词 throws 以及由逗号分隔的抛出异常类型的列表。例如:
public boolean java.lang.Object.equals(java.lang.Object)
访问修饰符按照由 "The Java Language Specification" 指定的规范化顺序放置。首先是 public,protected 或 private,接着是按以下顺序的其他修饰符:abstract、static、final、synchronized、native。
public String toGenericString()
Method
的字符串,包括类型参数。该字符串被格式化为方法访问修饰符(如果有),依次后跟用尖括号括起来的由逗号分隔的方法类型参数列表(如果有)、方法的一般返回类型、空格、声明方法的类、句点、方法名、括号以及由逗号分隔的方法的一般形参类型列表。空格用于将访问修饰符和类型参数或返回类型互相分隔开。如果不存在类型参数,则类型参数列表会被省略;如果类型参数列表存在,则用空格将列表与类名分隔开。如果声明方法以抛出异常,则参数列表后跟空格、单词 throws 以及由逗号分隔开的抛出一般异常类型的列表。如果不存在类型参数,则类型参数列表会被省略。
访问修饰符按照 "The Java Language Specification" 指定的规范化顺序放置。首先是 public,protected 或 private,接着是按以下顺序的其他修饰符:abstract、static、final、synchronized native。
Method
方法的字符串,包括类型参数
public Object invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
Method
对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。
如果底层方法是静态的,那么可以忽略指定的 obj
参数。该参数可以为 null。
如果底层方法所需的形参数为 0,则所提供的 args
数组长度可以为 0 或 null。
如果底层方法是实例方法,则使用动态方法查找来调用它,这一点记录在 Java Language Specification, Second Edition 的第 15.12.4.4 节中;在发生基于目标对象的运行时类型的重写时更应该这样做。
如果底层方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。
如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素不 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。
obj
- 从中调用底层方法的对象
args
- 用于方法调用的参数
args
在
obj
上指派该对象所表示方法的结果
IllegalAccessException
- 如果此
Method
对象强制执行 Java 语言访问控制,并且底层方法是不可访问的。
IllegalArgumentException
- 如果该方法是实例方法,且指定对象参数不是声明底层方法的类或接口(或其中的子类或实现程序)的实例;如果实参和形参的数量不相同;如果基本参数的解包转换失败;如果在解包后,无法通过方法调用转换将参数值转换为相应的形参类型。
InvocationTargetException
- 如果底层方法抛出异常。
NullPointerException
- 如果指定对象为 null,且该方法是一个实例方法。
ExceptionInInitializerError
- 如果由此方法引起的初始化失败。
public boolean isBridge()
public boolean isVarArgs()
public boolean isSynthetic()
Member
中的
isSynthetic
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
AnnotatedElement
复制的描述
AnnotatedElement
中的
getAnnotation
AccessibleObject
中的
getAnnotation
annotationClass
- 对应于注释类型的 Class 对象
NullPointerException
- 如果给定的注释类为 null
public Annotation[] getDeclaredAnnotations()
AnnotatedElement
复制的描述
AnnotatedElement
中的
getDeclaredAnnotations
AccessibleObject
中的
getDeclaredAnnotations
public Object getDefaultValue()
TypeNotPresentException
- 如果注释类型是
Class
且找不到默认类值的定义。
public Annotation[][] getParameterAnnotations()