public final class Field extends AccessibleObject implements Member
Field
提供有关类或接口的单个字段的信息和动态访问。
反射的字段可以是类(静态)字段或实例字段。
A Field
允许在获取或设置访问操作期间扩展转换,但如果发生缩小转换,则抛出IllegalArgumentException
。
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object obj)
将此
Field 与指定对象进行比较。
|
Object |
get(Object obj)
返回该所表示的字段的值
Field ,指定的对象上。
|
AnnotatedType |
getAnnotatedType()
返回一个AnnotatedType对象,该对象表示使用类型来指定此Field所表示的字段的声明类型。
|
<T extends Annotation> |
getAnnotation(类<T> annotationClass)
返回该元素的,如果这样的注释
,否则返回null指定类型的注释。
|
<T extends Annotation> |
getAnnotationsByType(类<T> annotationClass)
返回与此元素相关
联的注释 。
|
boolean |
getBoolean(Object obj)
获取静态或实例的值
boolean 字段。
|
byte |
getByte(Object obj)
获取静态或实例的值
byte 字段。
|
char |
getChar(Object obj)
获取类型为
char 的静态或实例字段的值,或通过扩大转换获得可转换为类型
char 的另一个原始类型的值。
|
Annotation[] |
getDeclaredAnnotations()
返回
直接存在于此元素上的注释。
|
类<?> |
getDeclaringClass()
返回表示
类 对象表示的字段的类或接口的
Field 对象。
|
double |
getDouble(Object obj)
获取类型为
double 的静态或实例字段的值,或通过扩展转换转换为类型
double 的另一个基本类型的值。
|
float |
getFloat(Object obj)
获取类型为
float 的静态或实例字段的值,或通过加宽转换转换为类型
float 的另一个基本类型的值。
|
Type |
getGenericType()
返回一个
Type 对象,它表示由该表示的字段的声明类型
Field 对象。
|
int |
getInt(Object obj)
获取类型为
int 的静态或实例字段的值,或通过扩展转换转换为类型
int 的另一个原始类型的值。
|
long |
getLong(Object obj)
获取类型为
long 的静态或实例字段的值,或通过扩大转换获得可转换为类型
long 的另一个基本类型的值。
|
int |
getModifiers()
返回由该
Field 对象表示的字段的Java语言修饰符,作为整数。
|
String |
getName()
返回由此
Field 对象表示的字段的名称。
|
short |
getShort(Object obj)
获取类型为
short 的静态或实例字段的值,或通过加宽转换转换为类型
short 的另一个基本类型的值。
|
类<?> |
getType()
返回一个
类 对象标识了此表示的字段的声明类型
Field 对象。
|
int |
hashCode()
返回此
Field 的哈希码。
|
boolean |
isEnumConstant()
如果此字段表示枚举类型的元素,则返回 true ;
返回false 其他。
|
boolean |
isSynthetic()
如果此字段是合成字段,则返回 true ;
返回false 其他。
|
void |
set(Object obj, Object value)
将指定对象参数上的此
Field 对象表示的字段设置为指定的新值。
|
void |
setBoolean(Object obj, boolean z)
设置作为一个字段的值
boolean 指定的对象上。
|
void |
setByte(Object obj, byte b)
设置作为一个字段的值
byte 指定的对象上。
|
void |
setChar(Object obj, char c)
设置作为一个字段的值
char 指定的对象上。
|
void |
setDouble(Object obj, double d)
设置作为一个字段的值
double 指定的对象上。
|
void |
setFloat(Object obj, float f)
设置作为一个字段的值
float 指定的对象上。
|
void |
setInt(Object obj, int i)
设置作为一个字段的值
int 指定的对象上。
|
void |
setLong(Object obj, long l)
设置作为一个字段的值
long 指定的对象上。
|
void |
setShort(Object obj, short s)
设置作为一个字段的值
short 指定的对象上。
|
String |
toGenericString()
返回描述此
Field 的字符串,包括其通用类型。
|
String |
toString()
返回一个描述这个
Field 的字符串。
|
getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAccessible, isAnnotationPresent, setAccessible, setAccessible
public 类<?> getDeclaringClass()
类
对象表示的字段的类或接口的
Field
对象。
getDeclaringClass
中的
Member
public int getModifiers()
Field
对象表示的字段的Java语言修饰符,作为整数。
应该使用Modifier
类来解码修饰符。
getModifiers
在接口
Member
Modifier
public boolean isEnumConstant()
true
;
返回false
否则。
true
当且仅当此字段表示枚举类型的元素时。
public boolean isSynthetic()
true
;
返回false
其他。
isSynthetic
中的
Member
public 类<?> getType()
类
对象标识了此表示的字段的声明类型
Field
对象。
类
对象表示的字段的声明类型的Class对象
public Type getGenericType()
Type
对象,表示由该Field
对象表示的字段的声明类型。
如果Type
是参数化类型,返回的Type
对象必须准确反映源代码中使用的实际类型参数。
如果底层字段的类型是类型变量或参数化类型,则会创建它。 否则解决。
Type
对象,表示由该
Field
对象表示的字段的声明类型
GenericSignatureFormatError
- 如果通用字段签名不符合The Java™ Virtual Machine Specification中
指定的格式
TypeNotPresentException
- 如果基础字段的泛型类型签名引用不存在的类型声明
MalformedParameterizedTypeException
- 如果基础字段的通用签名是指由于任何原因无法实例化的参数化类型
public boolean equals(Object obj)
Field
与指定对象进行比较。
如果对象相同,则返回true。
两个Field
对象是相同的,如果它们被同一个类声明并具有相同的名称和类型。
equals
在
Object
obj
- 用于比较的参考对象。
true
如果此对象与obj参数相同;
false
否则。
Object.hashCode()
, HashMap
public int hashCode()
Field
的哈希码。
这被计算为底层字段声明类名称及其名称的排他或哈希码。
hashCode
在
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public String 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
。
public String toGenericString()
Field
的字符串,包括其通用类型。
格式是字段的访问修饰符(如果有的话),后跟通用字段类型,后跟一个空格,然后是声明该字段的类的完全限定名称,后跟一个句点,后跟名称领域。
修饰符按照“Java语言规范”的规定放置在规范的顺序。 这是public
, protected
或private
以下顺序,然后再其它改性剂: static
, final
, transient
, volatile
。
Field
的字符串,包括其通用类型
public Object get(Object obj) throws IllegalArgumentException, IllegalAccessException
Field
,指定的对象上。
如果该对象具有原始类型,则该值将自动包装在对象中。
基础字段的值如下获得:
如果基础字段是静态字段,则忽略obj
参数; 它可能为null。
否则,底层字段是一个实例字段。 如果指定的obj
参数为空,则该方法将抛出一个NullPointerException
。 如果指定的对象不是声明底层字段的类或接口的实例,则该方法将抛出一个IllegalArgumentException
。
如果这个Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的,则该方法将抛出一个IllegalAccessException
。 如果底层字段是静态的,那么声明该字段的类如果尚未被初始化,则会被初始化。
否则,将从底层实例或静态字段检索该值。 如果该字段具有原始类型,则该值在返回之前被包装在对象中,否则返回原样。
如果该字段隐藏在obj
的类型中,则根据前述规则获取字段的值。
obj
- 从中提取表示字段的值的对象
obj
表示字段的值;
原始值被包装在适当的对象之前被返回
IllegalAccessException
- 如果此
Field
对象正在执行Java语言访问控制,并且底层字段无法访问。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
public boolean getBoolean(Object obj) throws IllegalArgumentException, IllegalAccessException
boolean
字段的值。
obj
- 该对象从中提取
boolean
值
boolean
字段
IllegalAccessException
- 如果这个
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的。
IllegalArgumentException
-如果指定的对象不是类或接口声明基础字段(或子类或实现它们的)的实例,或者如果该字段的值不能转化为类型
boolean
通过扩大转换。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
get(java.lang.Object)
public byte getByte(Object obj) throws IllegalArgumentException, IllegalAccessException
byte
字段。
obj
- 该对象从中提取
byte
值
byte
字段
IllegalAccessException
- 如果这个
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的。
IllegalArgumentException
-如果指定的对象不是类或接口声明基础字段(或子类或实现它们的)的实例,或者如果该字段的值不能转化为类型
byte
通过扩大转换。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
get(java.lang.Object)
public char getChar(Object obj) throws IllegalArgumentException, IllegalAccessException
char
的静态或实例字段的值,或通过扩展转换转换为类型
char
的另一个基本类型的值。
obj
- 该对象从中提取
char
值
char
IllegalAccessException
- 如果这个
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的。
IllegalArgumentException
-如果指定的对象不是类或接口声明基础字段(或子类或实现它们的)的实例,或者如果该字段的值不能转化为类型
char
通过扩大转换。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
get(java.lang.Object)
public short getShort(Object obj) throws IllegalArgumentException, IllegalAccessException
short
的静态或实例字段的值,或通过加宽转换获得可转换为类型
short
的另一个基本类型的值。
obj
- 该对象从中提取
short
值
short
IllegalAccessException
- 如果此
Field
对象正在执行Java语言访问控制,并且底层字段无法访问。
IllegalArgumentException
-如果指定的对象不是类或接口声明基础字段(或子类或实现它们的)的实例,或者如果该字段的值不能转化为类型
short
通过扩大转换。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
get(java.lang.Object)
public int getInt(Object obj) throws IllegalArgumentException, IllegalAccessException
int
或可转换另一基本类型为类型的
int
通过扩大转换。
obj
- 该对象从中提取
int
值
int
IllegalAccessException
- 如果这个
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的。
IllegalArgumentException
-如果指定的对象不是类或接口声明基础字段(或子类或实现它们的)的实例,或者如果该字段的值不能转化为类型
int
通过扩大转换。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果此方法引发的初始化失败。
get(java.lang.Object)
public long getLong(Object obj) throws IllegalArgumentException, IllegalAccessException
long
的静态或实例字段的值,或通过扩展转换转换为类型
long
的另一个基本类型的值。
obj
- 该对象从中提取
long
值
long
IllegalAccessException
- 如果这个
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的。
IllegalArgumentException
-如果指定的对象不是类或接口声明基础字段(或子类或实现它们的)的实例,或者如果该字段的值不能转化为类型
long
通过扩大转换。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
get(java.lang.Object)
public float getFloat(Object obj) throws IllegalArgumentException, IllegalAccessException
float
的静态或实例字段的值,或通过扩展转换获得可转换为类型
float
的另一个原始类型的值。
obj
- 该对象从中提取
float
值
float
IllegalAccessException
- 如果此
Field
对象正在执行Java语言访问控制,并且底层字段无法访问。
IllegalArgumentException
-如果指定的对象不是类或接口声明基础字段(或子类或实现它们的)的实例,或者如果该字段的值不能转化为类型
float
通过扩大转换。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
get(java.lang.Object)
public double getDouble(Object obj) throws IllegalArgumentException, IllegalAccessException
double
的静态或实例字段的值,或通过扩展转换获得可转换为类型
double
的另一个基本类型的值。
obj
- 该对象从中提取
double
值
double
IllegalAccessException
- 如果这个
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的。
IllegalArgumentException
-如果指定的对象不是类或接口声明基础字段(或子类或实现它们的)的实例,或者如果该字段的值不能转化为类型
double
通过扩大转换。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
get(java.lang.Object)
public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException
Field
对象表示的字段设置为指定的新值。
如果基础字段具有原始类型,则新值将自动展开。
操作进行如下:
如果基础字段是静态的,则忽略obj
参数; 它可能为null。
否则底层字段是一个实例字段。 如果指定的对象参数为空,则该方法将抛出一个NullPointerException
。 如果指定的对象参数不是声明底层字段的类或接口的实例,则该方法将抛出一个IllegalArgumentException
。
如果这个Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的,则该方法将抛出一个IllegalAccessException
。
如果底层字段是final,该方法将抛出一个IllegalAccessException
,除非setAccessible(true)
已成功为该Field
对象,该字段是非静态的。 以这种方式设置最终字段只有在反序列化或重建具有空白最终字段的类的实例时才有意义,才能使其可用于程序其他部分的访问。 在任何其他情况下使用可能会产生不可预测的影响,包括程序的其他部分继续使用此字段的原始值的情况。
如果底层字段是原始类型,则尝试将新值转换为原始类型的值的解包转换。 如果此尝试失败,该方法将抛出一个IllegalArgumentException
。
如果在可能展开后,新值不能通过标识或扩展转换转换为底层字段的类型,则该方法将抛出一个IllegalArgumentException
。
如果底层字段是静态的,那么声明该字段的类如果尚未被初始化,则会被初始化。
该字段设置为可能展开和扩展的新值。
如果字段隐藏在obj
类型中,则该字段的值根据前面的规则设置。
obj
- 其字段应被修改的对象
value
- 修改了
obj
的新值
IllegalAccessException
- 如果此
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的或最终的。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例,或者解包转换失败。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
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语言访问控制,并且底层字段是无法访问或最终的。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
set(java.lang.Object, java.lang.Object)
public void setByte(Object obj, byte b) throws IllegalArgumentException, IllegalAccessException
byte
指定的对象上。
这种方法相当于set(obj, bObj)
,其中bObj
是一个Byte
对象和bObj.byteValue() == b
。
obj
- 其字段应该被修改的对象
b
- 修改的
obj
字段的新值
IllegalAccessException
- 如果此
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的或最终的。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
set(java.lang.Object, java.lang.Object)
public void setChar(Object obj, char c) throws IllegalArgumentException, IllegalAccessException
char
指定的对象上。
这种方法相当于set(obj, cObj)
,其中cObj
是Character
对象和cObj.charValue() == c
。
obj
- 其字段应被修改的对象
c
- 修改了
obj
字段的新值
IllegalAccessException
- 如果此
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的或最终的。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
set(java.lang.Object, java.lang.Object)
public void setShort(Object obj, short s) throws IllegalArgumentException, IllegalAccessException
short
指定的对象上。
该方法相当于set(obj, sObj)
,其中sObj
为Short
对象, sObj.shortValue() == s
。
obj
- 其字段应被修改的对象
s
- 修改了
obj
的新值
IllegalAccessException
- 如果此
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问的或最终的。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
set(java.lang.Object, java.lang.Object)
public void setInt(Object obj, int i) throws IllegalArgumentException, IllegalAccessException
int
指定的对象上。
该方法相当于set(obj, iObj)
,其中iObj
是Integer
对象和iObj.intValue() == i
。
obj
- 其字段应该被修改的对象
i
- 修改了
obj
的新值
IllegalAccessException
- 如果这个
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问或最终的。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例,或者解包转换失败。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
set(java.lang.Object, java.lang.Object)
public void setLong(Object obj, long l) throws IllegalArgumentException, IllegalAccessException
long
指定的对象上。
这个方法相当于set(obj, lObj)
,其中lObj
是一个Long
对象和lObj.longValue() == l
。
obj
- 应修改其字段的对象
l
- 正在修改的
obj
字段的新值
IllegalAccessException
- 如果此
Field
对象正在强制执行Java语言访问控制,并且底层字段是无法访问的或最终的。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例,或者解包转换失败。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
set(java.lang.Object, java.lang.Object)
public void setFloat(Object obj, float f) throws IllegalArgumentException, IllegalAccessException
float
指定的对象上。
这个方法相当于set(obj, fObj)
,其中fObj
是一个Float
对象和fObj.floatValue() == f
。
obj
- 其字段应该被修改的对象
f
- 修改了
obj
字段的新值
IllegalAccessException
- 如果这个
Field
对象正在执行Java语言访问控制,并且底层字段是无法访问或最终的。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例,或者展开转换失败。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
set(java.lang.Object, java.lang.Object)
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语言访问控制,并且底层字段是无法访问的或最终的。
IllegalArgumentException
- 如果指定的对象不是声明底层字段(或其子类或实现者)的类或接口的实例,或者解包转换失败。
NullPointerException
- 如果指定的对象为空,该字段为实例字段。
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
set(java.lang.Object, java.lang.Object)
public <T extends Annotation> T getAnnotation(类<T> annotationClass)
AnnotatedElement
getAnnotation
在接口
AnnotatedElement
getAnnotation
在
AccessibleObject
T
- 要查询的注释类型,如果存在则返回
annotationClass
- 对应于注释类型的Class对象
NullPointerException
- 如果给定的注释类为空
public <T extends Annotation> T[] getAnnotationsByType(类<T> annotationClass)
AnnotatedElement.getAnnotation(Class)
之间的区别在于该方法检测其参数是否是可重复注释类型 (JLS 9.6),如果是,则尝试通过“查看”容器注释来查找该类型的一个或多个注释。
该方法的调用者可以自由修改返回的数组;
它将对返回给其他调用者的数组没有影响。
getAnnotationsByType
在界面
AnnotatedElement
getAnnotationsByType
在
AccessibleObject
T
- 要查询的注释的类型,如果存在则返回
annotationClass
- 对应于注释类型的Class对象
NullPointerException
- 如果给定的注释类为空
public Annotation[] getDeclaredAnnotations()
getDeclaredAnnotations
在接口
AnnotatedElement
getDeclaredAnnotations
在类
AccessibleObject
public AnnotatedType getAnnotatedType()