java反射获取本类和父类所有字段

2021-09-29  本文已影响0人  拄杖忙学轻声码

说明:

1、getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
2、getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
3、同样类似的还有getConstructors()和getDeclaredConstructors()、getMethods()和getDeclaredMethods(),这两者分别表示获取某个类的方法、构造函数。

获取父类所有字段:
要获取到当前类以及父类的所有属性,怎么办?

/*
 * Copyright (C) 2013 SHANGHAI VOLKSWAGEN, All rights reserved.
 * License version 1.0, a copy of which has been included with this.
 * @File  name:com.hkl.modules.utils.AnnotationUtil
 * @Create  on:2021/9/29
 * @Author:hkl
 */
package com.hkl.modules.utils;
 
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
/**
 * <p>ClassName:AnnotationUtil</p >
 * <p>Description:注解工具</p >
 * <p>Author:hkl</p >
 * <p>Date:2021/9/29</p >
 */
public class AnnotationUtil {
 
    /**
     * 获取本类及其父类的字段属性
     * @param clazz 当前类对象
     * @return 字段数组
     */
    public static Field[] getAllFields(Class<?> clazz) {
        List<Field> fieldList = new ArrayList<>();
        while (clazz != null){
            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
            clazz = clazz.getSuperclass();
        }
        Field[] fields = new Field[fieldList.size()];
        return fieldList.toArray(fields);
    }
 
}

测试:

    public static void main(String[] args) {
        DtoClass dtoClass = new DtoClass();

        Field[] allFields = AnnotationUtil.getAllFields(dtoClass.getClass());
        System.out.println("------------------------------------------");
        for (Field allField : allFields) {
            System.out.println("allField = " + allField.getName());
        }
    }
上一篇下一篇

猜你喜欢

热点阅读