public final class FieldUtil extends Object
Field
反射工具类.
Field
相关的几个方法的区别:
字段 说明 getDeclaredFields
返回 Field
对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段.包括公共、保护、默认(包)访问和私有字段, 但不包括继承的字段.
返回数组中的元素没有排序,也没有任何特定的顺序.
如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组.getFields
返回一个包含某些 Field
对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有 可访问公共字段.特别地,如果该 Class 对象表示一个类,则此方法返回该类及其所有超类的公共字段.
如果该 Class 对象表示一个接口,则此方法返回该接口及其所有超接口的公共字段.返回数组中的元素没有排序,也没有任何特定的顺序.
如果类或接口没有可访问的公共字段,或者表示一个数组类、一个基本类型或 void,则此方法返回长度为 0 的数组.
该方法不反映数组类的隐式长度字段.用户代码应使用Array
类的方法来操作数组.getDeclaredField
返回一个 Field
对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段.
注意,此方法不反映数组类的 length 字段.getField
返回一个 Field
对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段.
要反映的字段由下面的算法确定.
设 C 为此对象所表示的类:
如果 C 声明一个带有指定名的公共字段,则它就是要反映的字段.
如果在第 1 步中没有找到任何字段,则该算法被递归地应用于 C 的每一个直接超接口.直接超接口按其声明顺序进行搜索.
如果在第 1、2 两步没有找到任何字段,且 C 有一个超类 S,则在 S 上递归调用该算法.如果 C 没有超类,则抛出 NoSuchFieldException.
FieldUtils
,
"org.springframework.util.ReflectionUtils"Modifier and Type | Method and Description |
---|---|
static List<Field> |
getAllFieldList(Class<?> klass,
String... excludeFieldNames)
获得
klass 排除某些 excludeFieldNames 之后的字段list. |
static Map<String,Object> |
getAllFieldNameAndValueMap(Object obj,
String... excludeFieldNames)
获得对象
obj 所有字段的值(不是属性),key是 fieldName,value 是值. |
public static Map<String,Object> getAllFieldNameAndValueMap(Object obj, String... excludeFieldNames)
obj
所有字段的值(不是属性),key是 fieldName,value 是值.
- 是所有字段的值(不是属性)
- 自动过滤私有并且静态的字段,比如 LOGGER serialVersionUID
- 返回的map 是 TreeMap,顺序是 field name 的顺序
User user = new User(12L); LOGGER.debug(JsonUtil.format(FieldUtil.getAllFieldNameAndValueMap(user, "date")));返回:{ "age": null, "id": 12 }
obj
- the objexcludeFieldNames
- 需要排除的field names,如果是null或者empty, 那么不会判断obj
是null,抛出 NullPointerException
excludeFieldNames
是null或者empty,解析所有的fieldobj
没有字段或者字段都被参数 excludeFieldNames
排除掉了,返回 Collections.emptyMap()
getAllFieldList(Class, String...)
,
getFieldValue(Object, String)
public static List<Field> getAllFieldList(Class<?> klass, String... excludeFieldNames)
klass
排除某些 excludeFieldNames
之后的字段list.
- 是所有字段的值(不是属性)
- 自动过滤私有并且静态的字段,比如 LOGGER serialVersionUID
klass
- the klassexcludeFieldNames
- 需要排除的field names,如果传递过来是null或者empty 那么不会判断obj
是null,抛出 NullPointerException
excludeFieldNames
是null或者empty,解析所有的fieldFieldUtils.getAllFieldsList(Class)
是null或者empty,返回 Collections.emptyList()
obj
没有字段或者字段都被参数 excludeFieldNames
排除掉了,返回 Collections.emptyMap()
FieldUtils.getAllFieldsList(Class)
Copyright © 2008-2019 by feilong