【类字段工具类】FieldUtils

这里使用的是:3.9 的版本,还是比较新的

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
     <version>3.9</version>
</dependency>

 

 

Field getField(Class<?> cls, String fieldName) 获取指定字段名的公共字段,包括继承/实现的公共的字段

Field getField(final Class<?> cls, String fieldName, boolean forceAccess)

获取指定字段名的字段(无论私有还是公共),包括继承/实现的公共的或私有的字段

Field templateName = FieldUtils.getField(QcTemplate.class, "templateName");
System.out.println(templateName); // null

Field orgId = FieldUtils.getField(QcTemplate.class, "orgId", true);
System.out.println(orgId); // private java.lang.String com.hbsc.domain.QcTemplate.orgId

 

Field getDeclaredField(final Class<?> cls, final String fieldName) 获取指定字段名的公共字段,只获取当前类

Field getDeclaredField(Class<?> cls, String fieldName, boolean forceAccess)

获取指定字段名的字段,只获取当前类(无论私有还是公共),继承/实现的获取不到

Field templateName = FieldUtils.getDeclaredField(QcTemplate.class, "templateName");
System.out.println(templateName); // null

Field page = FieldUtils.getDeclaredField(QcTemplate.class, "page", true);
System.out.println(page); // null


Field[] getAllFields(final Class<?> cls) 获取所有字段,返回一个数组

Field[] allFields = FieldUtils.getAllFields(QcTemplate.class);
Arrays.stream(allFields).forEach(System.out::println);
// private static final long com.hbsc.domain.QcTemplate.serialVersionUID
// private java.lang.String com.hbsc.domain.QcTemplate.caseStatus
// private java.lang.String com.hbsc.domain.common.BaseBo.userName


List<Field> getAllFieldsList(final Class<?> cls) 获取所有字段,返回一个集合

List<Field> allFieldsList = FieldUtils.getAllFieldsList(QcTemplate.class);
allFieldsList.forEach(System.out::println);
// private static final long com.hbsc.domain.QcTemplate.serialVersionUID
// private java.lang.String com.hbsc.domain.QcTemplate.caseStatus
// private java.lang.String com.hbsc.domain.common.BaseBo.userName

 

Field[] getFieldsWithAnnotation(final Class<?> cls, final Class<? extends Annotation> annotationCls)

获取字段上有指定注解的字段(公共、私有、静态等),并返回一个字段数组

List<Field> getFieldsListWithAnnotation(final Class<?> cls, final Class<? extends Annotation> annotationCls)

获取字段上有指定注解的字段(公共、私有、静态等),并返回一个字段集合

List<Field> fieldsListWithAnnotation = FieldUtils.getFieldsListWithAnnotation(
    QcTemplate.class, JsonIgnore.class);
fieldsListWithAnnotation.forEach(System.out::println);

Field[] fieldsWithAnnotation = FieldUtils.getFieldsWithAnnotation(QcTemplate.class,
    JsonIgnore.class);
Arrays.stream(fieldsWithAnnotation).forEach(System.out::println);


Object readStaticField(Field field) 读取公共静态属性的值,包括继承/实现的公共的字段

Object readStaticField(Field field, boolean forceAccess)

读取静态属性的值,包括继承/实现的静态字段,与上面的区别是可以读到私有的

Object readStaticField(Class<?> cls, String fieldName) 读取静态属性的值,包括继承/实现的公共的字段

Object readStaticField(Class<?> cls, String fieldName, boolean forceAccess)

读取静态属性的值,与上面的区别是可以读到私有的

 

Object readDeclaredStaticField(Class<?> cls, String fieldName)

读取公共静态属性的值,不包括继承/实现的公共的字段

Object readDeclaredStaticField(Class<?> cls, String fieldName, boolean forceAccess)

读取静态属性的值,不包括继承/实现的静态字段,与上面的区别是可以读到私有的

 

Object readField(Field field, Object target) 读取对象的指定字段(公共的),包括可以读到继承/实现的字段

Object readField(Field field, Object target, boolean forceAccess)

读取对象的指定字段(都可以读到),包括可以读到继承/实现的字段

QcTemplate qcTemplate = new QcTemplate();
qcTemplate.setPage(123L);

Field pageField = FieldUtils.getField(QcTemplate.class, "page", true);
Object page = FieldUtils.readField(pageField, qcTemplate, true);
System.out.println(page); // 123



Object readField(Object target, String fieldName) 读取对象的指定字段名(公共的),包括可以读到父类的

Object readField(Object target, String fieldName, boolean forceAccess)

读取对象的指定字段名(都可以读到),包括可以读到父类的

QcTemplate qcTemplate = new QcTemplate();
qcTemplate.setOrgId("123");

Object orgId = FieldUtils.readField(qcTemplate, "orgId", true);
System.out.println(orgId); // 123

 

Object readDeclaredField(Object target, String fieldName) 读取对象的指定字段(公共的),不可以读到父类的

Object readDeclaredField(Object target, String fieldName, boolean forceAccess)

读取对象的指定字段(都可以读到),不可以读到父类的

 

写入的方法参数跟上面都一致,看上面过后下面的用法都应该百分百的懂

void writeStaticField(Field field, Object value)
void writeStaticField(Field field, Object value, boolean forceAccess)


void writeStaticField(Class<?> cls, String fieldName, Object value)
void writeStaticField(Class<?> cls, String fieldName, Object value, boolean forceAccess)


void writeDeclaredStaticField(Class<?> cls, String fieldName, Object value)
void writeDeclaredStaticField(Class<?> cls, String fieldName, Object value, boolean forceAccess)

 

void writeField(Field field, Object target, Object value)
void writeField(Field field, Object target, Object value, boolean forceAccess)


void writeField(Object target, String fieldName, Object value)
void writeField(Object target, String fieldName, Object value, boolean forceAccess)


void removeFinalModifier(final Field field) //删除字段的final修饰
void removeFinalModifier(final Field field, final boolean forceAccess)
不推荐使用。 
从Java 12.0开始,我们不再可以删除final修饰符,从而使此方法过时了。有关此更改的JDK讨论可以在这里找到:http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-November/056486.html
void writeDeclaredField(Object target, String fieldName, Object value)
void writeDeclaredField(Object target, String fieldName, Object value, boolean forceAccess)


 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值