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原创文章,未经本站允许不得转载。