FieldUtils的使用
Posted silenceshining
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FieldUtils的使用相关的知识,希望对你有一定的参考价值。
此处的FieldUtils来自org.apache.commons.lang3.reflect包,实际使用中他比单纯使用jdk中的api要方便的多:一是代码两少,二是提供一些额外的功能。原则就是,有轮子就用轮子,没必要自己造轮子,尤其是一些工具类,像common包里的这些工具类。
一 获取父类的属性
在某些场景下我们需要获取父类的某些属性,这时使用jdk的api getDeclaredFields()就无法实现,getDeclaredFields()只能拿到当前class的属性,当然也有其它方法来实现,但FieldUtils提供了一种非常简洁的方式:
package test; import com.fasterxml.jackson.annotation.JsonFormat; public class User extends Person { @JsonFormat String phoneNum; public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } }
package test; public class Person { String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name=‘" + name + ‘‘‘ + ", age=" + age + ‘}‘; } }
上述为存在继承关系的两个类,下面看例子:
package test; import com.fasterxml.jackson.annotation.JsonFormat; import org.apache.commons.lang3.reflect.FieldUtils; import java.lang.reflect.Field; public class FieldUtilsDemo { public static void main(String[] args) { //获取属性 Field[] declaredFields = User.class.getDeclaredFields(); for (Field field : declaredFields) { System.out.println("jdk api:" + field.getName()); } //获取父类的属性 Field[] fields = FieldUtils.getAllFields(User.class); for (Field field : fields) { System.out.println("FieldUtils获取" + field.getName()); } } }
打印结果:
jdk api:phoneNum
FieldUtils获取phoneNum
FieldUtils获取name
FieldUtils获取age
二 获取带注解的属性
看代码比较一下两种方式,在上述User类的phineNum属性上有一个JsonFormat注解,我们获取所有带有JsonFormat注解的属性。
package test; import com.fasterxml.jackson.annotation.JsonFormat; import org.apache.commons.lang3.reflect.FieldUtils; import java.lang.reflect.Field; public class FieldUtilsDemo { public static void main(String[] args) { //jdk方式 Field[] declaredFields = User.class.getDeclaredFields(); for (Field field : declaredFields) { if (field.isAnnotationPresent(JsonFormat.class)) { System.out.println("jdk api:" + field.getName()); } } //FieldUtils获取带注解的属性 Field[] annotationFields = FieldUtils.getFieldsWithAnnotation(User.class, JsonFormat.class); for (Field field : annotationFields) { System.out.println("FieldUtils获取"+field.getName()); } } }
打印結果:
jdk api:phoneNum
FieldUtils获取phoneNum
可以看出FieldUtils.getFieldsWithAnnotation非常方便。
以上是关于FieldUtils的使用的主要内容,如果未能解决你的问题,请参考以下文章