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, setAccessiblepublic 类<?> 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()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.