Field 反射
java.lang.reflect
类 Fieldjava.lang.Object?
java.lang.reflect.AccessibleObject ?
java.lang.reflect.Field
所有已实现的接口: AnnotatedElement, Member
public final class?Field
extends AccessibleObjectimplements MemberField
?提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。
Array
?允许在执行 get 或 set 访问操作期间进行扩展转换,但如果将发生收缩转换,则抛出一个IllegalArgumentException
。
另请参见: Member
,?Class
,?Class.getFields()
,?Class.getField(String)
,?Class.getDeclaredFields()
,Class.getDeclaredField(String)
字段摘要?从接口 java.lang.reflect.Member 继承的字段DECLARED, PUBLIC
?方法摘要?boolean
equals(Object?obj)
??????????将此?Field
?与指定对象比较。?Object
get(Object?obj)
??????????返回指定对象上此?Field
?表示的字段的值。<T extends Annotation>?
T
getAnnotation(Class<T>?annotationClass)
??????????如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。?boolean
getBoolean(Object?obj)
??????????获得一个静态或实例?boolean
?字段的值。?byte
getByte(Object?obj)
??????????获得一个静态或实例?byte
?字段的值。?char
getChar(Object?obj)
??????????获得?char
?类型或另一个通过扩展转换可以转换为?char
?类型的基本类型的静态或实例字段的值。?Annotation[]
getDeclaredAnnotations()
??????????返回直接存在于此元素上的所有注释。?Class<?>
getDeclaringClass()
??????????返回表示类或接口的?Class
?对象,该类或接口声明由此?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
?类型的基本类型的静态或实例字段的值。?Class<?>
getType()
??????????返回一个?Class
?对象,它标识了此?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
?的字符串。?从类 java.lang.reflect.AccessibleObject 继承的方法getAnnotations, isAccessible, isAnnotationPresent, setAccessible, setAccessible
?二.使用:
?? 1.拿到类的属性和设置属性值。
?比如 有一个User类
???? Class clazz=Class.forName("com.testBean.User");////得到类对象
??? Object bean=clazz..newInstance();//实例化该类。
?? a)//解析属性信息
?? Field[] fs=clazz.getDeclaredFields();
???
for(int i = 0 ; i < fs.length; i++){
?????????? Field f = fs[i];
?????????? f.setAccessible(true); //设置些属性是可以访问的
?????????? Object val = f.get(bean);//得到此属性的值? ?
?????????? System.out.println("name:"+f.getName()+", value = "+val);
?????????? f.set(bean,"12") ;??????? //给属性设值
? b)//解析方法信息
?? Method[] methodlist=cla.getDeclaredMethods();
?? c)得到指定的属性,并给该属性设置值。
??????? Field field = clazz.getDeclaredField("userName");
???????? field.setAccessible(true);
?? ??? ? field.set(bean, "张三");
??? 未完待续.


public final class?Field
Field
?提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。
Array
?允许在执行 get 或 set 访问操作期间进行扩展转换,但如果将发生收缩转换,则抛出一个IllegalArgumentException
。
Member
,?Class
,?Class.getFields()
,?Class.getField(String)
,?Class.getDeclaredFields()
,Class.getDeclaredField(String)
字段摘要?从接口 java.lang.reflect.Member 继承的字段
DECLARED, PUBLIC
?方法摘要?boolean
equals(Object?obj)
??????????将此?
Field
?与指定对象比较。?Object
get(Object?obj)
??????????返回指定对象上此?
Field
?表示的字段的值。<T extends Annotation>?
T
getAnnotation(Class<T>?annotationClass)
??????????如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。
?boolean
getBoolean(Object?obj)
??????????获得一个静态或实例?
boolean
?字段的值。?byte
getByte(Object?obj)
??????????获得一个静态或实例?
byte
?字段的值。?char
getChar(Object?obj)
??????????获得?
char
?类型或另一个通过扩展转换可以转换为?char
?类型的基本类型的静态或实例字段的值。?Annotation[]
getDeclaredAnnotations()
??????????返回直接存在于此元素上的所有注释。
?Class<?>
getDeclaringClass()
??????????返回表示类或接口的?
Class
?对象,该类或接口声明由此?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
?类型的基本类型的静态或实例字段的值。?Class<?>
getType()
??????????返回一个?
Class
?对象,它标识了此?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
?的字符串。?从类 java.lang.reflect.AccessibleObject 继承的方法getAnnotations, isAccessible, isAnnotationPresent, setAccessible, setAccessible
?二.使用:
?? 1.拿到类的属性和设置属性值。
?比如 有一个User类???? Class clazz=Class.forName("com.testBean.User");////得到类对象
??? Object bean=clazz..newInstance();//实例化该类。
?? a)//解析属性信息
?? Field[] fs=clazz.getDeclaredFields();
???
for(int i = 0 ; i < fs.length; i++){
?????????? Field f = fs[i];
?????????? f.setAccessible(true); //设置些属性是可以访问的
?????????? Object val = f.get(bean);//得到此属性的值? ?
?????????? System.out.println("name:"+f.getName()+", value = "+val);
?????????? f.set(bean,"12") ;??????? //给属性设值
? b)//解析方法信息
?? Method[] methodlist=cla.getDeclaredMethods();
?? c)得到指定的属性,并给该属性设置值。
??????? Field field = clazz.getDeclaredField("userName");
???????? field.setAccessible(true);
?? ??? ? field.set(bean, "张三");
??? 未完待续.