- 所有已实现的接口:
AnnotatedElement,Member
Field 提供有关类或接口的单个字段的信息和动态访问。反射字段可以是类(静态)字段或实例字段。
Field 允许在 get 或 set 访问操作期间发生扩大转换,但如果发生缩小转换则抛出 IllegalArgumentException。
- 自从:
- 1.1
- 参见:
-
字段摘要
-
方法总结
修饰符和类型方法描述返回此字段的不可修改的 访问标志 集,可能为空。boolean将此Field与指定对象进行比较。返回指定对象上此Field表示的字段的值。返回一个 AnnotatedType 对象,该对象表示使用一种类型来指定此 Field 表示的字段的声明类型。<T extends Annotation>
TgetAnnotation(Class<T> annotationClass) 如果此类注解为 present ,则返回此元素针对指定类型的注解,否则为 null。<T extends Annotation>
T[]getAnnotationsByType(Class<T> annotationClass) 返回带有此元素的 associated 注释。booleangetBoolean(Object obj) 获取静态或实例boolean字段的值。byte获取静态或实例byte字段的值。char获取char类型的静态或实例字段的值,或通过扩展转换可转换为char类型的另一种原始类型的值。Class<?>返回表示声明此Field对象表示的字段的类或接口的Class对象。double获取类型为double的静态或实例字段的值,或可通过扩展转换转换为类型double的另一种原始类型的值。float获取float类型的静态或实例字段的值,或通过扩展转换可转换为float类型的另一种原始类型的值。返回一个Type对象,该对象表示此Field对象表示的字段的声明类型。int获取类型为int的静态或实例字段的值,或可通过扩展转换转换为类型int的另一种原始类型的值。long获取long类型的静态或实例字段的值,或通过扩展转换可转换为long类型的另一种原始类型的值。int以整数形式返回此Field对象表示的字段的 Java 语言修饰符。getName()返回此Field对象表示的字段的名称。short获取short类型的静态或实例字段的值,或通过扩展转换可转换为short类型的另一种原始类型的值。Class<?>getType()返回一个Class对象,该对象标识此Field对象表示的字段的声明类型。inthashCode()返回此Field的哈希码。boolean如果此字段表示枚举类的元素,则返回true;否则返回false。boolean如果此字段是合成字段,则返回true;否则返回false。void将指定对象参数上的此Field对象表示的字段设置为指定的新值。voidsetAccessible(boolean flag) 将此反射对象的accessible标志设置为指示的boolean。voidsetBoolean(Object obj, boolean z) 将字段的值设置为指定对象上的boolean。void将字段的值设置为指定对象上的byte。void将字段的值设置为指定对象上的char。void将字段的值设置为指定对象上的double。void将字段的值设置为指定对象上的float。void将字段的值设置为指定对象上的int。void将字段的值设置为指定对象上的long。void将字段的值设置为指定对象上的short。返回描述此Field的字符串,包括其通用类型。toString()返回描述此Field的字符串。在类 java.lang.reflect.AccessibleObject 中声明的方法
canAccess, getAnnotations, getDeclaredAnnotation, getDeclaredAnnotations, getDeclaredAnnotationsByType, isAccessible, isAnnotationPresent, setAccessible, trySetAccessible
-
方法详情
-
setAccessible
public void setAccessible(boolean flag) 从类复制的描述:AccessibleObject将此反射对象的accessible标志设置为指示的boolean。值true表示反射对象在使用时应禁止检查 Java 语言访问控制。值false表示反射对象在使用时应强制检查 Java 语言访问控制,并在类描述中注明变化。如果以下任何一项成立,则类
C中的调用者可以使用此方法来启用对declaring classD的member的访问:C和D在同一模块中。- 成员是
public和D是public在一个包中,模块包含Dexports到至少包含C的模块。 - 成员是
protectedstatic,D是包中的public,包含D的模块导出到至少包含C的模块,而C是D的子类。 D在包含Dopens的模块到至少包含C的模块的包中。未命名和开放模块中的所有包都对所有模块开放,因此当D在未命名或开放模块中时,此方法总是成功。
当且仅当:
- 成员是
public,D是public,模块无条件包含Dexports。
当声明类与调用者位于不同的模块中并且包含声明类的包未向其开放时,此方法不能用于启用对私有成员、具有默认(包)访问权限的成员、受保护实例成员或受保护构造方法的访问调用者的模块。
此方法不能用于启用 write 对 non-modifiable final 字段的访问。以下字段是不可修改的:
true时的accessible标志抑制 Java 语言访问控制检查以仅启用 read 对这些不可修改的最终字段的访问。如果有安全管理器,它的
checkPermission方法将首先以ReflectPermission("suppressAccessChecks")权限调用。- 重写:
setAccessible在类AccessibleObject中- 参数:
flag-accessible标志的新值- 抛出:
InaccessibleObjectException- 如果无法启用访问SecurityException- 如果请求被安全管理器拒绝- 参见:
-
getDeclaringClass
返回表示声明此Field对象表示的字段的类或接口的Class对象。- 指定者:
getDeclaringClass在接口Member中- 返回:
- 表示底层成员的声明类的对象
-
getName
返回此Field对象表示的字段的名称。 -
getModifiers
public int getModifiers()以整数形式返回此Field对象表示的字段的 Java 语言修饰符。Modifier类应该用于解码修饰符。- 指定者:
getModifiers在接口Member中- 返回:
- 底层成员的 Java 语言修饰符
- 看Java 语言规范:
-
8.3 字段声明
9.3 字段(常量)声明
- 参见:
-
accessFlags
返回此字段的不可修改的 访问标志 集,可能为空。- 指定者:
accessFlags在接口Member中- 返回:
- 该字段不可修改的 访问标志 集,可能为空
- 看Java 虚拟机规范:
-
4.5 字段
- 自从:
- 20
- 参见:
-
isEnumConstant
public boolean isEnumConstant()如果此字段表示枚举类的元素,则返回true;否则返回false。- 返回:
true当且仅当此字段表示枚举类的元素时。- 看Java 语言规范:
-
8.9.1 枚举常量
- 自从:
- 1.5
-
isSynthetic
public boolean isSynthetic()如果此字段是合成字段,则返回true;否则返回false。- 指定者:
isSynthetic在接口Member中- 返回:
- 当且仅当此字段是 Java 语言规范定义的合成字段时才为真。
- 自从:
- 1.5
- 参见:
-
getType
返回一个Class对象,该对象标识此Field对象表示的字段的声明类型。- 返回:
-
一个
Class对象,标识该对象表示的字段的声明类型
-
getGenericType
返回一个Type对象,该对象表示此Field对象表示的字段的声明类型。如果声明的字段类型是参数化类型,则返回的
Type对象必须准确反映源代码中使用的实际类型参数。如果基础字段的类型是类型变量或参数化类型,则创建它。否则,它被解决了。
- 返回:
-
一个
Type对象,表示此Field对象表示的字段的声明类型 - 抛出:
GenericSignatureFormatError- 如果通用字段签名不符合指定的格式Java 虚拟机规范TypeNotPresentException- 如果基础字段的泛型类型签名引用不存在的类或接口声明MalformedParameterizedTypeException- 如果基础字段的通用签名指的是由于任何原因无法实例化的参数化类型- 自从:
- 1.5
-
equals
将此Field与指定对象进行比较。如果对象相同,则返回 true。如果两个Field对象由同一个类声明并且具有相同的名称和类型,则它们是相同的。 -
hashCode
public int hashCode()返回此Field的哈希码。这是作为基础字段的声明类名称及其名称的哈希码的异或计算得出的。 -
toString
返回描述此Field的字符串。格式是字段的访问修饰符(如果有),后跟字段类型,后跟空格,后跟声明该字段的类的完全限定名称,后跟句点,再后跟字段名称.例如:public static final int java.lang.Thread.MIN_PRIORITY private int java.io.FileDescriptor.fd
修饰符按照“Java 语言规范”指定的规范顺序放置。首先是
public、protected或private,然后是其他修饰符,顺序如下:static、final、transient、volatile。- 重写:
toString在类Object中- 返回:
-
描述这个
Field的字符串 - 看Java 语言规范:
-
8.3.1 字段修饰符
-
toGenericString
返回描述此Field的字符串,包括其通用类型。格式是字段的访问修饰符(如果有),后跟通用字段类型,后跟一个空格,后跟声明该字段的类的完全限定名称,后跟一个句点,再后跟类的名称场地。修饰符按照“Java 语言规范”指定的规范顺序放置。首先是
public、protected或private,然后是其他修饰符,顺序如下:static、final、transient、volatile。- 返回:
-
描述这个
Field的字符串,包括它的通用类型 - 看Java 语言规范:
-
8.3.1 字段修饰符
- 自从:
- 1.5
-
get
返回指定对象上此Field表示的字段的值。如果值具有基本类型,则该值会自动包装在对象中。底层字段的值获取如下:
如果底层字段是静态字段,
obj参数将被忽略;它可能为空。否则,底层字段是一个实例字段。如果指定的
obj参数为 null,该方法将抛出NullPointerException。如果指定的对象不是声明基础字段的类或接口的实例,则该方法抛出IllegalArgumentException。如果此
Field对象正在实施 Java 语言访问控制,并且底层字段不可访问,则该方法将抛出IllegalAccessException。如果基础字段是静态的,则声明该字段的类在尚未初始化的情况下被初始化。否则,将从基础实例或静态字段中检索该值。如果该字段具有原始类型,则该值在返回之前被包装在一个对象中,否则按原样返回。
如果字段隐藏在
obj类型中,则根据上述规则获取字段的值。- 参数:
obj- 要从中提取表示的字段值的对象- 返回:
-
对象
obj中表示字段的值;原始值在返回之前包装在适当的对象中 - 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段不可访问。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。
-
getBoolean
获取静态或实例boolean字段的值。- 参数:
obj- 从中提取boolean值的对象- 返回:
boolean字段的值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段不可访问。IllegalArgumentException- 如果指定对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者如果字段值无法通过扩展转换转换为类型boolean。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
getByte
获取静态或实例byte字段的值。- 参数:
obj- 从中提取byte值的对象- 返回:
byte字段的值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段不可访问。IllegalArgumentException- 如果指定对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者如果字段值无法通过扩展转换转换为类型byte。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
getChar
获取char类型的静态或实例字段的值,或通过扩展转换可转换为char类型的另一种原始类型的值。- 参数:
obj- 从中提取char值的对象- 返回:
-
转换为
char类型的字段的值 - 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段不可访问。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者如果字段值无法通过扩展转换转换为类型char。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
getShort
获取short类型的静态或实例字段的值,或通过扩展转换可转换为short类型的另一种原始类型的值。- 参数:
obj- 从中提取short值的对象- 返回:
-
转换为
short类型的字段的值 - 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段不可访问。IllegalArgumentException- 如果指定对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者如果字段值无法通过扩展转换转换为类型short。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
getInt
获取类型为int的静态或实例字段的值,或可通过扩展转换转换为类型int的另一种原始类型的值。- 参数:
obj- 从中提取int值的对象- 返回:
-
转换为
int类型的字段的值 - 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段不可访问。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者如果字段值无法通过扩展转换转换为类型int。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
getLong
获取long类型的静态或实例字段的值,或通过扩展转换可转换为long类型的另一种原始类型的值。- 参数:
obj- 从中提取long值的对象- 返回:
-
转换为
long类型的字段的值 - 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段不可访问。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者如果字段值无法通过扩展转换转换为类型long。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
getFloat
获取float类型的静态或实例字段的值,或通过扩展转换可转换为float类型的另一种原始类型的值。- 参数:
obj- 从中提取float值的对象- 返回:
-
转换为
float类型的字段的值 - 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段不可访问。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者如果字段值无法通过扩展转换转换为类型float。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
getDouble
获取类型为double的静态或实例字段的值,或可通过扩展转换转换为类型double的另一种原始类型的值。- 参数:
obj- 从中提取double值的对象- 返回:
-
转换为
double类型的字段的值 - 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段不可访问。IllegalArgumentException- 如果指定对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者如果字段值无法通过扩展转换转换为类型double。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
set
将指定对象参数上的此Field对象表示的字段设置为指定的新值。如果底层字段具有原始类型,则新值将自动展开。操作过程如下:
如果底层字段是静态的,则
obj参数被忽略;它可能为空。否则底层字段是一个实例字段。如果指定的对象参数为 null,该方法将抛出
NullPointerException。如果指定的对象参数不是声明基础字段的类或接口的实例,则该方法抛出IllegalArgumentException。如果此
Field对象正在实施 Java 语言访问控制,并且底层字段不可访问,则该方法将抛出IllegalAccessException。如果基础字段是最终字段,则当且仅当满足以下条件时,此
Field对象才具有 write 访问权限:setAccessible(true)已成功获得此Field对象;- 该字段是非静态的;和
- 该字段的声明类不是 隐藏类 ;和
- 该字段的声明类不是 记录类 。
IllegalAccessException。以这种方式设置最终字段只有在反序列化或重建具有空白最终字段的类实例期间才有意义,然后才能被程序的其他部分访问。在任何其他上下文中使用可能会产生不可预知的影响,包括程序的其他部分继续使用该字段的原始值的情况。
如果基础字段是原始类型,则尝试展开转换以将新值转换为原始类型的值。如果此尝试失败,该方法将抛出一个
IllegalArgumentException。如果在可能的解包之后,新值无法通过标识或扩展转换转换为基础字段的类型,则该方法将抛出
IllegalArgumentException。如果基础字段是静态的,则声明该字段的类在尚未初始化的情况下被初始化。
该字段设置为可能未包装和加宽的新值。
如果该字段在
obj类型中是隐藏的,则该字段的值按照上述规则设置。- 参数:
obj- 应修改其字段的对象value- 正在修改的obj字段的新值- 抛出:
IllegalAccessException- 如果这个Field对象正在执行 Java 语言访问控制并且底层字段是不可访问的或最终的;或者如果这个Field对象没有写访问权限。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。
-
setBoolean
public void setBoolean(Object obj, boolean z) throws IllegalArgumentException , IllegalAccessException 将字段的值设置为指定对象上的boolean。此方法等效于set(obj, zObj),其中zObj是一个Boolean对象和zObj.booleanValue() == z。- 参数:
obj- 应修改其字段的对象z- 正在修改的obj字段的新值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段是不可访问的或最终的;或者如果这个Field对象没有写访问权限。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
setByte
将字段的值设置为指定对象上的byte。此方法等效于set(obj, bObj),其中bObj是一个Byte对象和bObj.byteValue() == b。- 参数:
obj- 应修改其字段的对象b- 正在修改的obj字段的新值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段是不可访问的或最终的;或者如果这个Field对象没有写访问权限。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
setChar
将字段的值设置为指定对象上的char。此方法等效于set(obj, cObj),其中cObj是一个Character对象和cObj.charValue() == c。- 参数:
obj- 应修改其字段的对象c- 正在修改的obj字段的新值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段是不可访问的或最终的;或者如果这个Field对象没有写访问权限。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
setShort
将字段的值设置为指定对象上的short。此方法等效于set(obj, sObj),其中sObj是一个Short对象和sObj.shortValue() == s。- 参数:
obj- 应修改其字段的对象s- 正在修改的obj字段的新值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段是不可访问的或最终的;或者如果这个Field对象没有写访问权限。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
setInt
将字段的值设置为指定对象上的int。此方法等效于set(obj, iObj),其中iObj是一个Integer对象和iObj.intValue() == i。- 参数:
obj- 应修改其字段的对象i- 正在修改的obj字段的新值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段是不可访问的或最终的;或者如果这个Field对象没有写访问权限。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
setLong
将字段的值设置为指定对象上的long。此方法等效于set(obj, lObj),其中lObj是一个Long对象和lObj.longValue() == l。- 参数:
obj- 应修改其字段的对象l- 正在修改的obj字段的新值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段是不可访问的或最终的;或者如果这个Field对象没有写访问权限。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
setFloat
将字段的值设置为指定对象上的float。此方法等效于set(obj, fObj),其中fObj是一个Float对象和fObj.floatValue() == f。- 参数:
obj- 应修改其字段的对象f- 正在修改的obj字段的新值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段是不可访问的或最终的;或者如果这个Field对象没有写访问权限。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
setDouble
public void setDouble(Object obj, double d) throws IllegalArgumentException , IllegalAccessException 将字段的值设置为指定对象上的double。此方法等效于set(obj, dObj),其中dObj是一个Double对象和dObj.doubleValue() == d。- 参数:
obj- 应修改其字段的对象d- 正在修改的obj字段的新值- 抛出:
IllegalAccessException- 如果此Field对象正在执行 Java 语言访问控制并且基础字段是不可访问的或最终的;或者如果这个Field对象没有写访问权限。IllegalArgumentException- 如果指定的对象不是声明基础字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。NullPointerException- 如果指定的对象为空且该字段是实例字段。ExceptionInInitializerError- 如果此方法引发的初始化失败。- 参见:
-
getAnnotation
如果此类注解为 present ,则返回此元素针对指定类型的注解,否则为 null。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
getAnnotation在接口AnnotatedElement中- 重写:
getAnnotation在类AccessibleObject中- 类型参数:
T- 要查询并返回的注释类型(如果存在)- 参数:
annotationClass——注解类型对应的Class对象- 返回:
- 如果此元素上存在此元素的指定注解类型的注解,则为 null
- 抛出:
NullPointerException- 如果给定的注释类为 null- 自从:
- 1.5
-
getAnnotationsByType
返回带有此元素的 associated 注释。如果这个元素没有注解associated,返回值是一个长度为0的数组。这个方法和AnnotatedElement.getAnnotation(Class)的区别是这个方法检测它的参数是否是一个repeatable annotation type(JLS 9.6),如果是,则尝试寻找通过“查看”容器注解来查看该类型的一个或多个注释。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。请注意,此方法返回的任何注释都是声明注解。
- 指定者:
getAnnotationsByType在接口AnnotatedElement中- 重写:
getAnnotationsByType在类AccessibleObject中- 类型参数:
T- 要查询并返回的注释类型(如果存在)- 参数:
annotationClass——注解类型对应的Class对象- 返回:
- 如果与此元素相关联,则为指定注解类型的所有此元素的注释,否则为长度为零的数组
- 抛出:
NullPointerException- 如果给定的注释类为 null- 自从:
- 1.8
-
getAnnotatedType
返回一个 AnnotatedType 对象,该对象表示使用一种类型来指定此 Field 表示的字段的声明类型。- 返回:
- 表示此 Field 表示的字段的声明类型的对象
- 自从:
- 1.8
-