Field[] fields = object.getClass().getDeclaredFields(); // 获取实体类的所有属性,返回Field数组
当使用上面方法获取类的属性时候仅仅会返回本身的属性,想要获取其父类属性可以使用下列代码
if(null==object) return;
Class clazz = object.getClass();
List<Field> fieldsList = new ArrayList<Field>();
while (clazz != null) { // 遍历所有父类字节码对象
Field[] declaredFields = clazz.getDeclaredFields();
fieldsList.addAll(Arrays.asList(declaredFields)); //将`Filed[]`数组转换为`List<>`然后再将其拼接至`ArrayList`上
clazz = clazz.getSuperclass(); // 获得父类的字节码对象
}
LimitKeyInfo attr$keyinfo = field.getAnnotation(LimitKeyInfo.class);
当使用上面方法获取注解的时候,假如字段在父类上则必须在注解类上增加?@Inherited ,参考代码:
/**
* @Author Minco
* @Date 8:44 2020-07-24
* @Description 隐藏关键信息数据注解
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Inherited //元注解 只有加上这个子类才可以继承父类注解
public @interface LimitKeyInfo {
public boolean limit() default true;
}
|