【类字段工具类】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)


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章