- 所有已实现的接口:
-
AnnotatedElement
,GenericDeclaration
,Member
Method
提供了关于类或接口上的单个方法的信息和访问权限。反射方法可以是类方法或实例方法(包括抽象方法)。
Method
允许在匹配要调用的实际参数与基础方法的形式参数时发生扩展转换,但如果发生缩小转换,则会抛出IllegalArgumentException
。
- 自:
- 1.1
- 参见:
-
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
比较此Method
与指定对象。返回一个AnnotatedType
对象,表示用于指定由此可执行对象表示的方法/构造函数的返回类型的类型的使用。<T extends Annotation>
TgetAnnotation
(Class<T> annotationClass) 如果此注解存在,则返回此元素的指定类型的注解;否则返回null。返回此元素上直接存在的注解。Class
<?> 返回表示声明由此对象表示的方法的类或接口的Class
对象。返回由此Method
实例表示的注解成员的默认值。Class<?>[]
返回一个Class
对象数组,表示由此对象表示的底层可执行对象声明要抛出的异常的类型。Type[]
返回一个Type
对象数组,表示此可执行对象声明要抛出的异常。Type[]
返回一个Type
对象数组,表示由此对象表示的可执行对象的声明顺序的形式参数类型。返回一个Type
对象,表示由此Method
对象表示的方法的形式返回类型。int
返回由此对象表示的可执行对象的Java语言修饰符。getName()
返回由此Method
对象表示的方法的名称,作为String
。Annotation[][]
返回一个Executable
对象的形式参数上的注解的注解数组的数组,按声明顺序。int
返回由此对象表示的可执行对象的形式参数(无论是显式声明的还是隐式声明的或两者都不是)的数量。Class<?>[]
返回一个Class
对象数组,表示由此对象表示的可执行对象的声明顺序的形式参数类型。Class
<?> 返回一个Method
对象表示的方法的形式返回类型的Class
对象。返回一个GenericDeclaration
对象声明的类型变量的类型变量对象数组,按声明顺序。int
hashCode()
返回此Method
的哈希码。在指定对象上调用由此Method
对象表示的基础方法,使用指定的参数。boolean
isBridge()
如果此方法是桥接方法,则返回true
;否则返回false
。boolean
如果此方法是默认方法,则返回true
;否则返回false
。boolean
如果此可执行对象是合成构造,则返回true
;否则返回false
。boolean
如果此可执行对象声明要接受可变数量的参数,则返回true
;否则返回false
。void
setAccessible
(boolean flag) 将此反射对象的accessible
标志设置为指定的布尔值。返回描述此Method
的字符串,包括类型参数。toString()
返回描述此Method
的字符串。Methods declared in class java.lang.reflect.Executable
accessFlags, getAnnotatedExceptionTypes, getAnnotatedParameterTypes, getAnnotatedReceiverType, getAnnotationsByType, getParameters
Methods declared in class java.lang.reflect.AccessibleObject
canAccess, getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAccessible, isAnnotationPresent, setAccessible, trySetAccessible
Methods declared in class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods declared in interface java.lang.reflect.AnnotatedElement
getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent
-
Method Details
-
setAccessible
public void setAccessible(boolean flag) 从类中复制的描述:AccessibleObject
将此反射对象的accessible
标志设置为指定的布尔值。值为true
表示在使用时应该抑制对Java语言访问控制的检查。值为false
表示在使用时应该强制执行Java语言访问控制的检查,注意类描述中指出的变化。调用者在类
C
中可以使用此方法,以启用对声明类
D
的成员
的访问,如果满足以下任何条件:C
和D
在同一模块中。- 成员是
public
的,D
在将D
包含的模块导出
到至少包含C
的模块。 - 成员是
protected
static
的,D
在将D
包含的模块导出
到至少包含C
的模块,并且C
是D
的子类。 D
在将D
包含的模块打开
到至少包含C
的模块。未命名和打开模块中的所有包都对所有模块开放,因此当D
在未命名或打开模块中时,此方法总是成功的。
JNI代码可以使用此方法,如果满足以下条件,且调用栈上没有调用者类,则可以启用对
声明类
D
的成员
的访问:- 成员是
public
的,D
在包含D
的模块无条件导出
。
此方法不能用于启用对私有成员、具有默认(包)访问权限的成员、受保护的实例成员或受保护的构造函数的访问,当声明类与调用者的模块不同且包含声明类的包对调用者的模块不开放时。
此方法不能用于启用对
非可修改
最终字段的写访问。以下字段是不可修改的:当
true
时,accessible
标志会抑制Java语言访问控制检查,仅允许对这些不可修改的最终字段进行读访问。如果存在安全管理器,则首先使用
ReflectPermission("suppressAccessChecks")
权限调用其checkPermission
方法。- 覆盖:
-
setAccessible
在类AccessibleObject
中 - 参数:
-
flag
-accessible
标志的新值 - 抛出:
-
InaccessibleObjectException
- 如果无法启用访问权限 -
SecurityException
- 如果安全管理器拒绝请求 - 外部规范
- 参见:
-
getDeclaringClass
返回表示由此对象表示的方法的类或接口的Class
对象。- 指定者:
-
getDeclaringClass
在接口Member
中 - 指定者:
-
getDeclaringClass
在类Executable
中 - 返回:
- 表示底层成员的声明类的对象
-
getName
返回由此Method
对象表示的方法的名称,作为String
。- 指定由:
-
getName
在接口Member
- 指定由:
-
getName
在类Executable
- 返回:
- 底层成员的简单名称
-
getModifiers
public int getModifiers()返回此对象表示的可执行对象的Java语言修饰符。- 指定由:
-
getModifiers
在接口Member
- 指定由:
-
getModifiers
在类Executable
- 返回:
- 此对象表示的可执行对象的Java语言修饰符
- 参见 Java语言规范:
-
8.4.3 方法修饰符
- 另请参阅:
-
getTypeParameters
返回一个TypeVariable
对象数组,表示此GenericDeclaration
对象声明的泛型声明中声明的类型变量,按声明顺序排列。如果底层泛型声明不声明类型变量,则返回长度为0的数组。- 指定由:
-
getTypeParameters
在接口GenericDeclaration
- 指定由:
-
getTypeParameters
在类Executable
- 返回:
-
一个
TypeVariable
对象数组,表示此泛型声明声明的类型变量 - 抛出:
-
GenericSignatureFormatError
- 如果此泛型声明的泛型签名不符合Java虚拟机规范中指定的格式 - 参见 Java语言规范:
-
8.4.4 泛型方法
- 自:
- 1.5
-
getReturnType
返回一个Class
对象,表示此Method
对象表示的方法的形式返回类型。- 返回:
- 此对象表示的方法的返回类型
-
getGenericReturnType
返回一个Type
对象,表示此Method
对象表示的方法的形式返回类型。如果返回类型是参数化类型,则返回的
Type
对象必须准确反映源代码中使用的实际类型参数。如果返回类型是类型变量或参数化类型,则会创建它。否则,它会被解析。
- 返回:
-
一个
Type
对象,表示底层方法的形式返回类型 - 抛出:
-
GenericSignatureFormatError
- 如果泛型方法签名不符合Java虚拟机规范中指定的格式 -
TypeNotPresentException
- 如果底层方法的返回类型引用不存在的类或接口声明 -
MalformedParameterizedTypeException
- 如果底层方法的返回类型引用无法由于任何原因实例化的参数化类型 - 自:
- 1.5
-
getParameterTypes
返回一个Class
对象数组,表示此对象表示的可执行对象的形式参数类型,按声明顺序排列。如果底层可执行对象不带参数,则返回长度为0的数组。请注意,一些内部类的构造函数可能除了显式声明的参数外还具有隐式声明的参数。- 指定由:
-
getParameterTypes
在类Executable
- 返回:
- 此对象表示的可执行对象的参数类型
-
getParameterCount
public int getParameterCount()返回此对象表示的可执行对象的形式参数数量(无论是显式声明的、隐式声明的还是两者都不是)。- 指定由:
-
getParameterCount
在类Executable
- 返回:
- 此对象表示的可执行对象的形式参数数量
- 自:
- 1.8
-
getGenericParameterTypes
返回一个Type
对象数组,表示此对象表示的可执行对象的形式参数类型,按声明顺序排列。如果底层可执行对象不带参数,则返回长度为0的数组。请注意,一些内部类的构造函数可能除了显式声明的参数外还具有隐式声明的参数。还请注意,作为建模工件,返回的参数数量可能会因是否存在泛型信息而有所不同。如果存在泛型信息,则只返回源代码中明确存在的参数;如果不存在泛型信息,则可能还会返回隐式和合成参数。如果形式参数类型是参数化类型,则为其返回的
Type
对象必须准确反映源代码中使用的实际类型参数。如果形式参数类型是类型变量或参数化类型,则会创建它。否则,它会被解析。
- 覆盖:
-
getGenericParameterTypes
在类Executable
- 返回:
-
一个表示底层可执行对象的形式参数类型的
Type
对象数组,按声明顺序排列 - 抛出:
-
GenericSignatureFormatError
- 如果泛型方法签名不符合Java虚拟机规范中指定的格式 -
TypeNotPresentException
- 如果底层可执行对象的任何形式参数引用不存在的类型声明 -
MalformedParameterizedTypeException
- 如果底层可执行对象的形式参数引用无法由于任何原因实例化的参数化类型 - 自:
- 1.5
-
getExceptionTypes
返回一个Class
对象数组,表示此对象表示的底层可执行对象声明要抛出的异常类型。如果可执行对象在其throws
子句中未声明异常,则返回长度为0的数组。- 指定由:
-
getExceptionTypes
在类Executable
- 返回:
- 此对象表示的可执行对象声明要抛出的异常类型
-
getGenericExceptionTypes
返回一个Type
对象数组,表示此可执行对象声明要抛出的异常类型。如果底层可执行对象在其throws
子句中未声明异常,则返回长度为0的数组。如果异常类型是类型变量或参数化类型,则会创建它。否则,它会被解析。
- 覆盖:
-
getGenericExceptionTypes
在类Executable
- 返回:
-
一个表示底层可执行对象抛出的异常类型的
Type
对象数组 - 抛出:
-
GenericSignatureFormatError
- 如果泛型方法签名不符合Java虚拟机规范中指定的格式 -
TypeNotPresentException
- 如果底层可执行对象的throws
子句引用不存在的类型声明 -
MalformedParameterizedTypeException
- 如果底层可执行对象的throws
子句引用无法由于任何原因实例化的参数化类型 - 自:
- 1.5
-
equals
将此Method
与指定对象进行比较。如果对象相同,则返回true。如果两个Method
由同一类声明并具有相同的名称、形式参数类型和返回类型,则它们相同。 -
hashCode
public int hashCode()返回此Method
的哈希码。哈希码计算为基础方法声明类名的哈希码与方法名称的异或结果。 -
toString
返回描述此Method
的字符串。字符串格式为方法访问修饰符(如果有),后跟方法返回类型,后跟一个空格,后跟声明方法的类,后跟一个句点,后跟方法名称,后跟方法的形式参数类型的括号,以逗号分隔。如果方法抛出已检查的异常,则参数列表后跟一个空格,后跟单词"throws
",后跟一个逗号分隔的抛出异常类型列表。例如:public boolean java.lang.Object.equals(java.lang.Object)
访问修饰符按照《Java语言规范》指定的规范顺序放置。这是首先
public
,protected
或private
,然后按照以下顺序放置其他修饰符:abstract
,default
,static
,final
,synchronized
,native
,strictfp
。- 覆盖:
-
toString
在类Object
中 - 返回:
-
描述此
Method
的字符串 - 参见Java语言规范:
-
8.4.3 方法修饰符
9.4 方法声明
9.6.1 注解接口元素
-
toGenericString
返回描述此Method
的字符串,包括类型参数。字符串格式为方法访问修饰符(如果有),后跟一个尖括号分隔的逗号分隔的方法类型参数列表(如果有),包括类型参数的信息性边界(如果有),后跟方法的通用返回类型,后跟一个空格,后跟声明方法的类,后跟一个句点,后跟方法名称,后跟方法的通用形式参数类型的括号,以逗号分隔。如果此方法声明为接受可变数量的参数,则最后一个参数不是"Type[]
",而是"Type...
"。访问修饰符之间和与类型参数或返回类型之间使用空格分隔。如果没有类型参数,则省略类型参数列表;如果存在类型参数列表,则空格将列表与类名分隔。如果方法声明抛出异常,则参数列表后跟一个空格,后跟单词"throws
",后跟一个逗号分隔的通用抛出异常类型列表。访问修饰符按照《Java语言规范》指定的规范顺序放置。这是首先
public
,protected
或private
,然后按照以下顺序放置其他修饰符:abstract
,default
,static
,final
,synchronized
,native
,strictfp
。- 指定者:
-
toGenericString
在类Executable
中 - 返回:
-
描述此
Method
的字符串,包括类型参数 - 参见Java语言规范:
-
8.4.3 方法修饰符
9.4 方法声明
9.6.1 注解接口元素
- 自1.5起:
- 1.5
-
invoke
public Object invoke(Object obj, Object... args) throws IllegalAccessException, InvocationTargetException 调用由此Method
对象表示的基础方法,使用指定对象和指定参数。各个参数将自动解包以匹配原始形式参数,并且原始和引用参数都将根据需要进行方法调用转换。如果基础方法是静态的,则忽略指定的
obj
参数。它可以为null。如果基础方法所需的形式参数数量为0,则提供的
args
数组可以长度为0或为null。如果基础方法是实例方法,则将使用动态方法查找调用它,如《Java语言规范》第15.12.4.4节所述;特别是,基于目标对象的运行时类型可能会发生覆盖。
如果基础方法是静态的,则声明方法的类将在尚未初始化的情况下进行初始化。
如果方法正常完成,则返回其返回值给调用者; 如果值具有原始类型,则首先将其适当地包装在对象中。但是,如果值具有原始类型的数组类型,则数组的元素不会被包装在对象中;换句话说,将返回原始类型的数组。如果基础方法的返回类型为void,则调用返回null。
- 参数:
-
obj
- 调用基础方法的对象 -
args
- 用于方法调用的参数 - 返回:
-
在
obj
上调度此对象表示的方法的结果,参数为args
- 抛出:
-
IllegalAccessException
- 如果此Method
对象正在执行Java语言访问控制并且基础方法不可访问。 -
IllegalArgumentException
- 如果方法是实例方法且指定的对象参数不是声明基础方法的类或接口(或其子类或实现者)的实例;如果实际参数和形式参数的数量不同;如果原始参数的解包转换失败;或者如果在可能的解包后,参数值无法通过方法调用转换转换为相应的形式参数类型。 -
InvocationTargetException
- 如果基础方法引发异常。 -
NullPointerException
- 如果指定的对象为null且方法是实例方法。 -
ExceptionInInitializerError
- 如果此方法引发的初始化失败。
-
isBridge
public boolean isBridge()如果此方法是桥接方法,则返回true
; 否则返回false
。- API注释:
-
桥接方法是Java编译器在源代码中的方法旁边创建的合成方法。桥接方法在各种情况下由Java编译器使用,以弥合Java编程语言语义和JVM语义之间的差异。
桥接方法的一个示例用途是作为Java编译器支持协变覆盖的技术,其中子类覆盖一个方法并为新方法提供比超类中方法更具体的返回类型。虽然Java语言规范禁止一个类声明具有相同参数类型但返回类型不同的两个方法,但虚拟机不会。协变覆盖经常用于
Cloneable
类的情况,其中从java.lang.Object
继承的clone
方法被覆盖并声明为返回类的类型。例如,Object
声明
和protected Object clone() throws CloneNotSupportedException {...}
EnumSet<E>
声明其语言级别的协变覆盖
如果正在使用此技术,则public EnumSet<E> clone() {...}
EnumSet
的类文件将具有两个clone
方法,一个返回EnumSet<E>
,另一个是返回Object
的桥接方法。桥接方法是Object.clone()
的JVM级别覆盖。桥接方法的主体调用其非桥接对应方法并返回其结果。 - 返回:
-
如果此方法是桥接方法,则返回
true
;否则返回false
- 参见Java语言规范:
-
8.4.8.3 覆盖和隐藏的要求
15.12.4.5 创建帧,同步,传输控制
- 参见Java虚拟机规范:
-
4.6 方法
- 自版本:
- 1.5
- 另请参见:
-
isVarArgs
public boolean isVarArgs()如果此可执行程序声明为接受可变数量的参数,则返回true
;否则返回false
。- 覆盖:
-
isVarArgs
在类Executable
中 - 返回:
-
如果此可执行程序声明为接受可变数量的参数,则返回
true
;否则返回false
- 参见Java语言规范:
-
8.4.1 形式参数
- 自版本:
- 1.5
-
isSynthetic
public boolean isSynthetic()如果此可执行程序是合成构造,则返回true
;否则返回false
。- 指定者:
-
isSynthetic
在接口Member
中 - 覆盖:
-
isSynthetic
在类Executable
中 - 返回:
- 如果此可执行程序是由Java语言规范定义的合成构造,则返回true。
- 参见Java语言规范:
-
13.1 二进制形式
- 参见Java虚拟机规范:
-
4.6 方法
- 自版本:
- 1.5
- 另请参见:
-
isDefault
public boolean isDefault()如果此方法是默认方法,则返回true
;否则返回false
。默认方法是一个公共的非抽象实例方法,即一个具有主体的非静态方法,在接口中声明。- 返回:
- 如果此方法是由Java语言规范定义的默认方法,则返回true。
- 参见Java语言规范:
-
9.4 方法声明
- 自版本:
- 1.8
-
getDefaultValue
返回此Method
实例表示的注解成员的默认值。如果成员是原始类型,则返回相应包装类型的实例。如果成员没有关联默认值,或者方法实例不表示注解类型的已声明成员,则返回null。- 返回:
-
表示此
Method
实例的注解成员的默认值。 - 抛出:
-
TypeNotPresentException
- 如果注解是Class
类型且找不到默认类值的定义。 - 参见Java语言规范:
-
9.6.2 注解类型元素的默认值
- 自版本:
- 1.5
-
getAnnotation
如果指定类型的注解对此元素存在,则返回该元素的注解;否则返回null。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
-
getAnnotation
在接口AnnotatedElement
中 - 覆盖:
-
getAnnotation
在类Executable
中 - 类型参数:
-
T
- 要查询并返回的注解类型 - 参数:
-
annotationClass
- 对应于注解类型的Class对象 - 返回:
- 如果此元素上存在指定注解类型的注解,则返回该元素的注解,否则返回null
- 抛出:
-
NullPointerException
- 如果给定的注解类为null - 自版本:
- 1.5
-
getDeclaredAnnotations
返回直接存在于此元素上的注解。此方法忽略继承的注解。如果此元素上没有直接存在的注解,则返回长度为0的数组。调用此方法的调用者可以修改返回的数组;这不会影响返回给其他调用者的数组。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
-
getDeclaredAnnotations
在接口AnnotatedElement
中 - 覆盖:
-
getDeclaredAnnotations
在类AccessibleObject
中 - 返回:
- 直接存在于此元素上的注解
- 自版本:
- 1.5
-
getParameterAnnotations
返回一个Executable
对象表示的方法/构造函数的返回类型的类型使用。如果此Executable
对象表示构造函数,则AnnotatedType
对象表示构造对象的类型。如果此Executable
对象表示方法,则AnnotatedType
对象表示使用类型来指定方法的返回类型。- Specified by:
-
getParameterAnnotations
in classExecutable
- Returns:
- an array of arrays that represent the annotations on the formal and implicit parameters, in declaration order, of the executable represented by this object
- Since:
- 1.5
- See Also:
-
getAnnotatedReturnType
Returns anAnnotatedType
object that represents the use of a type to specify the return type of the method/constructor represented by this Executable. If thisExecutable
object represents a constructor, theAnnotatedType
object represents the type of the constructed object. If thisExecutable
object represents a method, theAnnotatedType
object represents the use of a type to specify the return type of the method.- 指定者:
-
getAnnotatedReturnType
在类Executable
- 返回:
-
表示由此
Executable
所代表的方法或构造函数的返回类型的对象 - 自版本:
- 1.8
-