java.lang.reflect
类 Method
java.lang.Object java.lang.reflect.AccessibleObject java.lang.reflect.Method
-
所有已实现的接口:
- AnnotatedElement, GenericDeclaration, Member
public final class Method extends AccessibleObject implements GenericDeclaration, Member
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 |
方法详细信息 |
---|
getDeclaringClass
public Class<?> getDeclaringClass()
-
返回表示声明由此
Method
对象表示的方法的类或接口的Class
对象。 -
-
指定者:
-
接口
Member
中的getDeclaringClass
-
接口
-
-
返回:
- 表示声明底层成员的类的对象
getName
public String getName()
getModifiers
public int getModifiers()
-
以整数形式返回此
Method
对象所表示方法的 Java 语言修饰符。应该使用Modifier
类对修饰符进行解码。 -
-
指定者:
-
接口
Member
中的getModifiers
-
接口
-
-
返回:
- 底层成员的 Java 语言修饰符 另请参见:
-
Modifier
getTypeParameters
public TypeVariable<Method>[] getTypeParameters()
- 返回 TypeVariable 对象的数组,这些对象描述了由 GenericDeclaration 对象表示的一般声明按声明顺序来声明的类型变量。如果底层一般声明没有声明类型变量,则返回长度为 0 的数组。
-
-
指定者:
-
接口
GenericDeclaration
中的getTypeParameters
-
接口
-
-
返回:
- TypeVariable 对象的数组,这些对象描述了通过一般声明来声明的类型变量 抛出:
-
GenericSignatureFormatError
- 如果此一般声明的一般签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式
从以下版本开始:
- 1.5
getReturnType
public Class<?> getReturnType()
-
返回一个
Class
对象,该对象描述了此Method
对象所表示的方法的正式返回类型。 -
-
返回:
- 此对象所表示的方法的返回类型
getGenericReturnType
public Type getGenericReturnType()
-
返回表示由此
Method 对象所表示方法的正式返回类型的
Type 对象。
如果返回类型是参数化类型,则返回的 Type 对象必须实际反映源代码中所用参数的实际类型。
如果返回类型是类型变量或参数化类型,则创建它。否则将解析它。
-
-
返回:
- 表示底层方法的正式返回类型的 Type 对象 抛出:
-
GenericSignatureFormatError
- 如果一般方法签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式 -
TypeNotPresentException
- 如果底层方法的返回类型引用不存在的类型声明 -
MalformedParameterizedTypeException
- 如果底层方法的返回类型引用无论如何都无法实例化的参数化类型
从以下版本开始:
- 1.5
getParameterTypes
public Class<?>[] getParameterTypes()
-
按照声明顺序返回
Class
对象的数组,这些对象描述了此Method
对象所表示的方法的形参类型。如果底层方法不带参数,则返回长度为 0 的数组。 -
-
返回:
- 此对象所表示的方法的参数类型
getGenericParameterTypes
public Type[] getGenericParameterTypes()
-
按照声明顺序返回
Type 对象的数组,这些对象描述了此
Method 对象所表示的方法的形参类型的。如果底层方法不带参数,则返回长度为 0 的数组。
如果形参类型是参数化类型,则为其返回的 Type 对象必须实际反映源代码中使用的实际类型参数。
如果形参类型是类型变量或参数化类型,则创建它。否则将解析它。
-
-
返回:
- 按照声明顺序返回表示底层方法的形参类型的 Type 对象数组 抛出:
-
GenericSignatureFormatError
- 如果一般方法签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式 -
TypeNotPresentException
- 如果底层方法的所有参数类型都引用不存在的类型声明 -
MalformedParameterizedTypeException
- 如果所有底层方法的参数类型引用无论如何都无法实例化的参数化类型
从以下版本开始:
- 1.5
getExceptionTypes
public Class<?>[] getExceptionTypes()
-
返回
Class
对象的数组,这些对象描述了声明将此Method
对象表示的底层方法抛出的异常类型。如果此方法没有在其throws
子句中声明异常,则返回长度为 0 的数组。 -
-
返回:
- 声明由此对象表示的方法抛出的异常类型
getGenericExceptionTypes
public Type[] getGenericExceptionTypes()
-
返回
Type 对象数组,这些对象描述了声明由此
Method 对象抛出的异常。如果底层方法没有在其
throws 子句中声明异常,则返回长度为 0 的数组。
如果异常类型是参数化的类型,那么为它返回的 Type 对象必须实际反映源代码中所用参数的实际类型。
如果异常类型是类型变量或参数化类型,则创建它。否则将解析它。
-
-
返回:
- 表示由底层方法抛出的异常类型的 Type 数组 抛出:
-
GenericSignatureFormatError
- 如果一般方法签名不符合 Java Virtual Machine Specification, 3rd edition 中指定的格式 -
TypeNotPresentException
- 如果底层方法的 throws 子句引用不存在的类型声明 -
MalformedParameterizedTypeException
- 如果底层方法的 throws 子句引用无论如何都无法实例化的参数化类型
从以下版本开始:
- 1.5
equals
public boolean equals(Object obj)
-
将此
Method
与指定对象进行比较。如果对象相同,则返回 true。如果它们由相同的类声明,具有相同的名称、形参类型和返回类型,则两个Method
相同。 -
-
参数:
-
obj
- 要与之比较的引用对象。
返回:
-
如果此对象与 obj 参数相同,则返回
true
;否则返回false
。
另请参见:
-
Object.hashCode()
,Hashtable
-
hashCode
public int hashCode()
-
返回此
Method
的哈希码。哈希码按底层方法的声明类名称和方法名称的哈希码的异或计算。 -
-
返回:
- 此对象的一个哈希码值。 另请参见:
-
Object.equals(java.lang.Object)
,Hashtable
toString
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。
-
-
返回:
- 该对象的字符串表示形式。
toGenericString
public String toGenericString()
-
返回描述此
Method
的字符串,包括类型参数。该字符串被格式化为方法访问修饰符(如果有),依次后跟用尖括号括起来的由逗号分隔的方法类型参数列表(如果有)、方法的一般返回类型、空格、声明方法的类、句点、方法名、括号以及由逗号分隔的方法的一般形参类型列表。空格用于将访问修饰符和类型参数或返回类型互相分隔开。如果不存在类型参数,则类型参数列表会被省略;如果类型参数列表存在,则用空格将列表与类名分隔开。如果声明方法以抛出异常,则参数列表后跟空格、单词 throws 以及由逗号分隔开的抛出一般异常类型的列表。如果不存在类型参数,则类型参数列表会被省略。访问修饰符按照 "The Java Language Specification" 指定的规范化顺序放置。首先是 public,protected 或 private,接着是按以下顺序的其他修饰符:abstract、static、final、synchronized native。
-
-
返回:
-
描述此
Method
方法的字符串,包括类型参数
从以下版本开始:
- 1.5
-
描述此
invoke
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
- 如果由此方法引起的初始化失败。
-
isBridge
public boolean isBridge()
- 如果此方法是 bridge 方法,则返回 true;否则,返回 false。
-
-
返回:
- 当且仅当此方法是由 Java Language Specification 定义的 bridge 方法时,才返回 true。 从以下版本开始:
- 1.5
isVarArgs
public boolean isVarArgs()
- 如果将此方法声明为带有可变数量的参数,则返回 true;否则,返回 false。
-
-
返回:
- 当且仅当将此方法声明为带有可变数量的参数时,才返回 true。 从以下版本开始:
- 1.5
isSynthetic
public boolean isSynthetic()
- 如果此方法为复合方法,则返回 true;否则,返回 false。
-
-
指定者:
-
接口
Member
中的isSynthetic
-
接口
-
-
返回:
- 当且仅当此方法是由 Java Language Specification 定义的复合方法时,才返回 true。 从以下版本开始:
- 1.5
getAnnotation
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
-
从接口
AnnotatedElement
复制的描述 - 如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。
-
-
指定者:
-
接口
AnnotatedElement
中的getAnnotation
覆盖:
-
类
AccessibleObject
中的getAnnotation
-
接口
-
-
参数:
-
annotationClass
- 对应于注释类型的 Class 对象
返回:
- 如果该元素的指定注释类型的注释存在于此对象上,则返回这些注释,否则返回 null 抛出:
-
NullPointerException
- 如果给定的注释类为 null
从以下版本开始:
- 1.5
-
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()
-
从接口
AnnotatedElement
复制的描述 - 返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。
-
-
指定者:
-
接口
AnnotatedElement
中的getDeclaredAnnotations
覆盖:
-
类
AccessibleObject
中的getDeclaredAnnotations
-
接口
-
-
返回:
- 直接存在于此元素上的所有注释 从以下版本开始:
- 1.5
getDefaultValue
public Object getDefaultValue()
- 返回由此 Method 实例表示的注释成员的默认值。如果该成员为基本类型,则返回相应包装器类型的实例。如果不存在与该成员关联的默认值或者该成员实例不表示注释类型的声明成员,则返回 null。
-
-
返回:
- 由此 Method 实例表示的注释成员的默认值。 抛出:
-
TypeNotPresentException
- 如果注释类型是Class
且找不到默认类值的定义。
从以下版本开始:
- 1.5
getParameterAnnotations
public Annotation[][] getParameterAnnotations()
- 返回表示按照声明顺序对此 Method 对象所表示方法的形参进行注释的那个数组的数组。(如果底层方法没有参数,则返回长度为零的数组。如果该方法有一个或多个参数,则为每个不带注释的参数返回长度为零的嵌套数组。)返回数组中包含的注释对象是可序列化的。此方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。
-
-
返回:
- 表示按声明顺序对此 Method 对象所表示方法的形参进行注释的那个数组的数组 从以下版本开始:
- 1.5