Java反射 getFields和getDeclaredFields的区别

如题所述

关于获取类的字段有两种方式:getFields()和getDeclaredFields()。我们先来看看这两者的区别吧:


    getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。 

    getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。


具体编码如下:

我们先创建一个POJO

public class User {  
    private long id;  
    private String name;  
  
    public void setId(long id) {  
        this.id = id;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public long getId() {  
        return id;  
    }  
  
    public String getName() {  
        return name;  
    }  
}

再来获取此类中的所有字段

Field[] fields = User.class.getDeclaredFields();

获取字段的名称

String fieldName = field.getName();

获取字段的修饰符

int fieldValue = field.getModifiers();//如:private、static、final等

与某个具体的修饰符进行比较

Modifier.isStatic(fieldValue)//看此修饰符是否为静态(static)

获取字段的声明类型

field.getType();//返回的是一个class

与某个类型进行比较

field.getType() == Timestamp.class

获取指定对象中此字段的值

Object fieldObject= field.get(user);//user可以看做是从数据库中查找出来的对象

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-27
getDeclaredField和getField的主要区别:
1,getDeclaredMethods能拿到所有(不包括继承的方法);
2,getMethods只能拿到public方法(包括继承的类或接口的方法) 其他都一样。本回答被网友采纳
第2个回答  2016-09-07
getFields()获得某个类的所有的公共(public)的字段,包括父类。

getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。

同样类似的还有getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。
相似回答