Java反射 getFields和getDeclaredFields的区别

默认分类 未结 1 1185
_o0峳峳0o_
_o0峳峳0o_ 2023-03-24 22:02
相关标签:
1条回答
  • 2023-03-24 22:21

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

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

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

    具体编码如下:

    我们先创建一个POJO

    publicclassUser{privatelongid;privateStringname;publicvoidsetId(longid){this.id=id;}publicvoidsetName(Stringname){this.name=name;}publiclonggetId(){returnid;}publicStringgetName(){returnname;}}

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

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

    获取字段的名称

    StringfieldName=field.getName();

    获取字段的修饰符

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

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

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

    获取字段的声明类型

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

    与某个类型进行比较

    field.getType()==Timestamp.class

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

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

    getDeclaredField和getField的主要区别: 1,getDeclaredMethods能拿到所有(不包括继承的方法); 2,getMethods只能拿到public方法(包括继承的类或接口的方法) 其他都一样。

    getFields()获得某个类的所有的公共(public)的字段,包括父类。 getDeclaredFields()获得某个类的所有申明的字段,即包括public、private和proteced,但是不包括父类的申明字段。 同样类似的还有getConstructors()和getDeclaredConstructors(),getMethods()和getDeclaredMethods()。

    0 讨论(0)
提交回复