Java Field类
Field是一个类,位于Java.lang.reflect包下,在Java反射中Field用于获取某个类的属性或该属性的属性值。
获取Field类对象
1. Class.getDeclaredField(String name);
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段(包括私有成员)。
2. Class.getDeclaredFields();
返回 Field 对象的一个数组,该数组包含此 Class 对象所表示的类或接口所声明的所有字段(包括私有成员)。
3. Class.getField(String name);
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
4. Class.getFields();
返回一个包含某些 Field 对象的数组,该数组包含此 Class 对象所表示的类或接口的所有可访问公共字段。
主要方法
getType(): 获取属性声明时类型对象(返回class对象)
getGenericType() : 返回属性声的Type类型
getName() : 获取属性声明时名字
getAnnotations() : 获得这个属性上所有的注释
getModifiers() : 获取属性的修饰
isEnumConstant() : 判断这个属性是否是枚举类
isSynthetic() : 判断这个属性是否是 复合类
get(Object obj) : 取得obj对象这个Field上的值
set(Object obj, Object value) : 向obj对象的这个Field设置新值value
例子
//Person.java public class Person{ public String name; private Integer age; private String sex; //省略所有属性的set、get方法
package com.mao.test; import java.lang.reflect.Field; public class Test { public static void main(String[]args) throws NoSuchFieldException, SecurityException { Person person =new Person(); //通过Class.getDeclaredField(String name)获取类或接口的指定已声明字段。 Field f1=person.getClass().getDeclaredField("name"); System.out.println("-----Class.getDeclaredField(String name)用法-------"); System.out.println(f1); System.out.println("-----Class.getDeclaredFields()用法-------"); //通过Class.getDeclaredFields()获取类或接口的指定已声明字段。 Field []f2=person.getClass().getDeclaredFields(); for(Field field:f2) { System.out.println(field); } System.out.println("-----Class.getField(String name)用法-------"); //通过Class.getField(String name)返回一个类或接口的指定公共成员字段,私有成员报错。 Field f3=person.getClass().getField("name"); System.out.println(f3); //如果获取age属性(私有成员) 则会报错 //Field f3=person.getClass().getField("name"); System.out.println("-----Class.getFields()用法-------"); //通过Class.getField(),返回 Class 对象所表示的类或接口的所有可访问公共字段。 Field []f4=person.getClass().getFields(); for(Field fields:f4) { //因为只有name属性为共有,因此只能遍历出name属性 System.out.println(fields); } } }
运行结果:
-----Class.getDeclaredField(String name)用法------- public java.lang.String com.mao.test.Person.name -----Class.getDeclaredFields()用法------- public java.lang.String com.mao.test.Person.name private java.lang.Integer com.mao.test.Person.age private java.lang.String com.mao.test.Person.sex -----Class.getField(String name)用法------- public java.lang.String com.mao.test.Person.name -----Class.getFields()用法------- public java.lang.String com.mao.test.Person.name
总结
Field类中最常用的是get(Object obj)和set(Object obj, Object value)这两个方法,所以这两个方法是最重要的。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。