java.lang.reflect

接口
异常
错误
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 与指定对象进行比较。
<T extends Annotation>
T
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()
String 形式返回此 Method 对象表示的方法名称。

指定者:
接口 Member 中的 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 相同。

覆盖:
Object 中的 equals
参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false
另请参见:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
返回此 Method 的哈希码。哈希码按底层方法的声明类名称和方法名称的哈希码的异或计算。

覆盖:
Object 中的 hashCode
返回:
此对象的一个哈希码值。
另请参见:
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" 指定的规范化顺序放置。首先是 publicprotectedprivate,接着是按以下顺序的其他修饰符:abstractstaticfinalsynchronizednative

覆盖:
Object 中的 toString
返回:
该对象的字符串表示形式。

toGenericString

public String toGenericString()
返回描述此 Method 的字符串,包括类型参数。该字符串被格式化为方法访问修饰符(如果有),依次后跟用尖括号括起来的由逗号分隔的方法类型参数列表(如果有)、方法的一般返回类型、空格、声明方法的类、句点、方法名、括号以及由逗号分隔的方法的一般形参类型列表。空格用于将访问修饰符和类型参数或返回类型互相分隔开。如果不存在类型参数,则类型参数列表会被省略;如果类型参数列表存在,则用空格将列表与类名分隔开。如果声明方法以抛出异常,则参数列表后跟空格、单词 throws 以及由逗号分隔开的抛出一般异常类型的列表。如果不存在类型参数,则类型参数列表会被省略。

访问修饰符按照 "The Java Language Specification" 指定的规范化顺序放置。首先是 publicprotectedprivate,接着是按以下顺序的其他修饰符:abstractstaticfinalsynchronized 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 - 用于方法调用的参数
返回:
使用参数 argsobj 上指派该对象所表示方法的结果
抛出:
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